home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / INFO / INTER39B.ZIP / INTERRUP.F < prev    next >
Text File  |  1994-02-06  |  323KB  |  8,441 lines

  1. Interrupt List, part 6 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------D-22---------------------------------
  4. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  5. Desc:    this vector specifies the address of the routine which is to be given
  6.       control after a program is terminated; it should never be called
  7.       directly, since it does not point at an interrupt handler
  8. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  9.       termination, and then a FAR JMP is performed to the address in INT 22
  10.     normally points at the instruction immediately following INT 21/AH=4Bh
  11.       call which loaded the current program
  12. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  13. --------G-22---------------------------------
  14. INT 22 - COMTROL HOSTESS i/ISA DEBUGGER - CHANGE FIRMWARE DEBUGGING PORT
  15.     AL = new firmware debugging port
  16. Return: ???
  17. SeeAlso: INT 21"COMTROL",INT 23"COMTROL"
  18. --------D-23---------------------------------
  19. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  20. ---DOS 1.x---
  21. Return: AH = 00h abort program
  22.     if all registers preserved, restart DOS call
  23. ---DOS 2+---
  24.     CF clear
  25. Return: all registers preserved
  26.     return via RETF or RETF 2 with CF set
  27.         DOS will abort program with errorlevel 0
  28.     else (RETF/RETF 2 with CF clear or IRET)
  29.         interrupted DOS call is restarted
  30. Notes:    this interrupt is invoked whenever DOS detects a ^C or ^Break; it
  31.       should never be called directly
  32.     MS-DOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  33.     DOS remembers the stack pointer before calling INT 23, and if it is
  34.       not the same on return, pops and discards the top word; this is what
  35.       permits a return with RETF as well as IRET or RETF 2
  36.     any DOS call may safely be made within the INT 23 handler, although
  37.       the handler must check for a recursive invocation if it does
  38.       call DOS
  39. SeeAlso: INT 1B
  40. --------G-23---------------------------------
  41. INT 23 - COMTROL HOSTESS i/ISA DEBUGGER - GET CONFIGURATION INFORMATION
  42.     AL = query type
  43.         00h get old config map
  44.         Return: AX = old config map
  45.         01h get dual-ported RAM map
  46.         Return: BX:AX = dual-ported RAM map
  47.         02h get SCC port map
  48.         Return: BX:AX = SCC port map
  49. SeeAlso: INT 22"COMTROL",INT 26"COMTROL"
  50. --------D-24---------------------------------
  51. INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
  52. Note:    invoked when a critical (usually hardware) error is encountered; should
  53.       never be called directly
  54. SeeAlso: INT 21/AH=95h
  55.  
  56. Critical error handler is invoked with:
  57.     AH = type and processing flags
  58.         bit 7 clear = disk I/O error
  59.           set    = -- if block device, bad FAT image in memory
  60.               -- if char device, error code in DI
  61.         bit 6  unused
  62.         bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
  63.         bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
  64.         bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
  65.         bit 2 \ disk area of error    00 = DOS area  01 = FAT
  66.         bit 1 /            10 = root dir  11 = data area
  67.         bit 0 = 1 if write, 0 if read
  68.     AL = drive number if AH bit 7 clear
  69.     BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device)
  70.     DI low byte contains error code if AH bit 7 set
  71.        00h write-protection violation attempted
  72.        01h unknown unit for driver
  73.        02h drive not ready
  74.        03h unknown command given to driver
  75.        04h data error (bad CRC)
  76.        05h bad device driver request structure length
  77.        06h seek error
  78.        07h unknown media type
  79.        08h sector not found
  80.        09h printer out of paper
  81.        0Ah write fault
  82.        0Bh read fault
  83.        0Ch general failure
  84.        0Dh (DOS 3+) sharing violation
  85.        0Eh (DOS 3+) lock violation
  86.        0Fh invalid disk change
  87.        10h (DOS 3+) FCB unavailable
  88.        11h (DOS 3+) sharing buffer overflow
  89.        12h (DOS 4+) code page mismatch
  90.        13h (DOS 4+) out of input
  91.        14h (DOS 4+) insufficient disk space
  92.     STACK:    DWORD    return address for INT 24 call
  93.         WORD    flags pushed by INT 24
  94.         WORD    original AX on entry to INT 21
  95.         WORD    BX
  96.         WORD    CX
  97.         WORD    DX
  98.         WORD    SI
  99.         WORD    DI
  100.         WORD    BP
  101.         WORD    DS
  102.         WORD    ES
  103.         DWORD    return address for INT 21 call
  104.         WORD    flags pushed by INT 21
  105. Handler must return:
  106.     AL = action code
  107.         00h ignore error and continue processing request
  108.         01h retry operation
  109.         02h terminate program through the equivalent of INT 21/AH=4Ch
  110.             (INT 20h for DOS 1.x)
  111.         03h fail system call in progress
  112.     SS,SP,DS,ES,BX,CX,DX preserved
  113. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  114.     if the handler returns to the application by popping the stack, DOS
  115.       will be in an unstable state until the first call with AH > 0Ch
  116.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  117.       critical errors
  118.     if IGNORE specified but not allowed, it is turned into FAIL
  119.     if RETRY specified but not allowed, it is turned into FAIL
  120.     if FAIL specified but not allowed, it is turned into ABORT
  121.     (DOS 3+) if a critical error occurs inside the critical error handler,
  122.       the DOS call is automatically failed
  123. --------D-25---------------------------------
  124. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  125.     AL = drive number (00h = A:, 01h = B:, etc)
  126.     CX = number of sectors to read
  127.     DX = starting logical sector number (0000h - highest sector on drive)
  128.     DS:BX -> buffer for data
  129. Return: CF clear if successful
  130.     CF set on error
  131.         AH = status
  132.          80h device failed to respond (timeout)
  133.          40h seek operation failed
  134.          20h controller failed
  135.          10h data error (bad CRC)
  136.          08h DMA failure
  137.          04h requested sector not found
  138.          03h write-protected disk (INT 26 only)
  139.          02h bad address mark
  140.          01h bad command
  141.         AL = error code (same as passed to INT 24 in DI)
  142.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  143.     may destroy all other registers except segment registers
  144. Notes:    original flags are left on stack, and must be popped by caller
  145.     this call bypasses the DOS filesystem
  146.     examination of CPWIN386.CPL indicates that if this call fails with
  147.       error 0408h on an old-style (<32M) call, one should retry the
  148.       call with the high bit of the drive number in AL set
  149. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  150.       invalid drive number
  151.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  152.       wrong number of bytes on the stack; use the huge-partition version
  153.       (INT 25/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  154. SeeAlso: INT 13/AH=02h,INT 25/CX=FFFFh,INT 26
  155. --------D-25----CXFFFF-----------------------
  156. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  157.     CX = FFFFh
  158.     AL = drive number (0=A, 1=B, etc)
  159.     DS:BX -> disk read packet (see below)
  160. Return: same as above
  161. Notes:    partition is potentially >32M (and requires this form of the call) if
  162.       bit 1 of device attribute word in device driver is set
  163.     original flags are left on stack, and must be removed by caller
  164.     this call bypasses the DOS filesystem
  165. SeeAlso: INT 13/AH=02h,INT 25,INT 26/CX=FFFFh
  166.  
  167. Format of disk read packet:
  168. Offset    Size    Description
  169.  00h    DWORD    sector number
  170.  04h    WORD    number of sectors to read
  171.  06h    DWORD    transfer address
  172. --------d-25CDCD-----------------------------
  173. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  174.     AX = CDCDh
  175.     DS:BX -> buffer for address (see below)
  176.     CX = 0001h
  177.     DX = 0000h
  178. Return: AX = CDCDh if Stacker installed
  179.         DS:BX buffer filled
  180.  
  181. Format of driver address buffer:
  182. Offset    Size    Description
  183.  00h    WORD    signature CDCDh
  184.  02h    WORD    ??? 0001h
  185.  04h    DWORD    pointer to start of Stacker device driver
  186.  
  187. Format of device driver:
  188. Offset    Size    Description
  189.  00h    WORD    signature A55Ah
  190.  02h    WORD    Stacker version * 64h
  191.  04h    WORD    offset of volume-specific information offset table
  192.         (list of WORDs, one per drive, containing offsets to various
  193.         information)
  194.  06h 56 BYTEs    n/a
  195.  3Eh    BYTE    volume number, set after INT 21/AX=4404h
  196.         (use to index into volume-specific info offset table)
  197.  3Fh 19 BYTEs    n/a
  198.  52h  4 BYTEs    ASCII string "SWAP"
  199.  56h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  200.  
  201. Format of Stacker boot record:
  202. Offset    Size    Description
  203. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  204. 1F8h    DWORD    pointer to start of Stacker device driver
  205. 1FCh    WORD    Stacker volume number
  206. 1FEh    WORD    ???
  207. --------c-25--FFSI4358-----------------------
  208. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  209.     AL = FFh
  210.     SI = 4358h
  211. Return: SI = 6378h if installed
  212.         CX = segment of device driver PC-CACHE.SYS
  213.         DX = version (major in DH, minor in DL)
  214. Program: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  215.       access to certain disk drivers for devices such as Bernoulli drives
  216. SeeAlso: INT 13/AH=A0h
  217. --------D-26---------------------------------
  218. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  219.     AL = drive number (00h = A:, 01h = B:, etc)
  220.     CX = number of sectors to write
  221.     DX = starting logical sector number (0000h - highest sector on drive)
  222.     DS:BX -> data to write
  223. Return: CF clear if successful
  224.     CF set on error
  225.         AH = status
  226.          80h device failed to respond (timeout)
  227.          40h seek operation failed
  228.          20h controller failed
  229.          10h data error (bad CRC)
  230.          08h DMA failure
  231.          04h requested sector not found
  232.          03h write-protected disk (INT 26 only)
  233.          02h bad address mark
  234.          01h bad command
  235.         AL = error code (same as passed to INT 24 in DI)
  236.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  237.     may destroy all other registers except segment registers
  238. Notes:    original flags are left on stack, and must be popped by caller
  239.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  240.       disk buffers referencing sectors which are written with this call
  241.     examination of CPWIN386.CPL indicates that if this call fails with
  242.       error 0408h on an old-style (<32M) call, one should retry the
  243.       call with the high bit of the drive number in AL set
  244. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  245.       invalid drive number
  246.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  247.       wrong number of bytes on the stack; use the huge-partition version
  248.       (INT 26/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  249. SeeAlso: INT 13/AH=03h,INT 25,INT 26/CX=FFFFh
  250. --------D-26----CXFFFF-----------------------
  251. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  252.     CX = FFFFh
  253.     AL = drive number (0=A, 1=B, etc)
  254.     DS:BX -> disk write packet (see below)
  255. Return: same as above
  256. Notes:    partition is potentially >32M (and requires this form of the call) if
  257.       bit 1 of device attribute word in device driver is set
  258.     original flags are left on stack, and must be removed by caller
  259.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  260.       disk buffers referencing sectors which are written with this call
  261. SeeAlso: INT 13/AH=03h,INT 25/CX=FFFFh,INT 26
  262.  
  263. Format of disk write packet:
  264. Offset    Size    Description
  265.  00h    DWORD    sector number
  266.  04h    WORD    number of sectors to read
  267.  06h    DWORD    transfer address
  268. --------G-26---------------------------------
  269. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  270.     ???
  271. Return: ???
  272. SeeAlso: INT 23"COMTROL",INT 27"COMTROL"
  273. --------D-27---------------------------------
  274. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  275.     DX = number of bytes to keep resident (max FFF0h)
  276.     CS = segment of PSP
  277. Return: never
  278. Notes:    this is an obsolete call
  279.     INT 22, INT 23, and INT 24 are restored from the PSP
  280.     does not close any open files
  281.     the minimum number of bytes which will remain resident is 110h for
  282.       DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which
  283.       implements this service in COMMAND.COM rather than the DOS kernel
  284. SeeAlso: INT 21/AH=31h
  285. --------G-27---------------------------------
  286. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  287.     ???
  288. Return: ???
  289. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  290.       controller
  291. SeeAlso: INT 20"COMTROL",INT 26"COMTROL"
  292. --------D-28---------------------------------
  293. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  294.     SS:SP = top of MS-DOS stack for I/O functions
  295. Return: all registers preserved
  296. Desc:    This interrupt is invoked each time one of the DOS character input
  297.       functions loops while waiting for input.  Since a DOS call is in
  298.       progress even though DOS is actually idle during such input waits,
  299.       hooking this function is necessary to allow a TSR to perform DOS
  300.       calls while the foreground program is waiting for user input.     The
  301.       INT 28h handler may invoke any INT 21h function except functions
  302.       00h through 0Ch.
  303. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  304.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  305.       the INT 28h handler without destroying the DOS stacks.
  306.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  307.       handle which refers to CON
  308.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  309.       set to 01h; if larger, DOS is truly busy and should not be reentered
  310.     the default handler is an IRET instruction
  311.     supported in OS/2 compatibility box
  312.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  313.       this interrupt as superseded
  314. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  315. --------D-29---------------------------------
  316. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  317.     AL = character to display
  318. Return: nothing
  319. Notes:    automatically called when writing to a device with bit 4 of its device
  320.       driver header set (see also INT 21/AH=52h)
  321.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  322.       vector and assume that ANSI.SYS is installed if the segment is larger
  323.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  324.     the default handler under DESQview 2.2 understands the <Esc>[2J
  325.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  326. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
  327. --------N-2A00-------------------------------
  328. INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK
  329.     AH = 00h
  330. Return: AH <> 00h if installed
  331.     CF set if NetWare v2.15 NetBIOS emulator installed
  332. Note:    also supported by Lantastic, NetWare, 10NET, etc.
  333. SeeAlso: INT 5C
  334. --------N-2A0000-----------------------------
  335. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  336.     AX = 0000h
  337. Return: AH = DDh
  338. SeeAlso: INT 5B
  339. --------N-2A01-------------------------------
  340. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  341.     AH = 01h
  342.     ES:BX -> NCB (see INT 5C)
  343. Return: AL = NetBIOS error code
  344.     AH = 00h if no error
  345.        = 01h on error
  346. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  347. --------N-2A02-------------------------------
  348. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  349.     AH = 02h
  350.     ???
  351. Return: ???
  352. --------N-2A0300-----------------------------
  353. INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O
  354.     AX = 0300h
  355.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  356.         must include the colon)
  357. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  358.     CF set if access via files only
  359. Notes:    do not use direct disk accesses if this function returns CF set or the
  360.       device is redirected (INT 21/AX=5F02h)
  361.     may take some time to execute
  362.     this function is called by the DOS kernel on INT 25 and INT 26
  363.     also supported by Lantastic, NetWare, 10NET, etc.
  364. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  365. --------N-2A04-------------------------------
  366. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST
  367.     AH = 04h
  368.     AL = error retry
  369.         00h automatically retry request on errors 09h, 12h, and 21h
  370.         01h no retry
  371.         02h ???
  372.     ES:BX -> Network Control Block (see INT 5C"NetBIOS")
  373. Return: AX = 0000h if successful
  374.     AH = 01h on error
  375.         AL = error code
  376. Notes:    invokes either INT 5B or INT 5C as appropriate
  377.     also supported by Lantastic, NetWare, 10NET, etc.
  378.     NetWare 2.15 NetBIOS emulator returns CF clear if successful, CF set
  379.       on error
  380. SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  381. --------N-2A0500-----------------------------
  382. INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY
  383.     AX = 0500h
  384. Return: AX reserved
  385.     BX = number of network names available
  386.     CX = number of network control blocks available
  387.     DX = number of network sessions available
  388. Note:    also supported by Lantastic, NetWare, 10NET, etc.
  389. SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS"
  390. --------N-2A06-------------------------------
  391. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  392.     AH = 06h
  393.     AL = 01h set concatenation mode (all printer output put in one job)
  394.          02h set truncation mode (default)
  395.          printer open/close starts new print job
  396.          03h flush printer output and start new print job
  397. Return: CF set on error
  398.         AX = error code
  399.     CF clear if successful
  400. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  401.     also supported by LANtastic, NetWare, 10NET, etc.
  402.     LANtastic v4.x no longer supports this call
  403. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  404. --------N-2A07-------------------------------
  405. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  406.     AH = 07h
  407.     ???
  408. Return: ???
  409. Program: PC Network is an early networking package which was renamed the
  410.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  411. SeeAlso: AH=86h
  412. --------N-2A2001-----------------------------
  413. INT 2A - MS Networks or NETBIOS - ???
  414.     AX = 2001h
  415.     ???
  416. Return: ???
  417. Note:    intercepted by DESQview 2.x
  418. --------N-2A2002-----------------------------
  419. INT 2A - NETWORK - ???
  420.     AX = 2002h
  421.     ???
  422. Return: ???
  423. Note:    called by MS-DOS 3.30-6.00 APPEND
  424. --------N-2A2003-----------------------------
  425. INT 2A - NETWORK - ???
  426.     AX = 2003h
  427.     ???
  428. Return: ???
  429. Note:    called by MS-DOS 3.30-6.00 APPEND
  430. --------N-2A7802-----------------------------
  431. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  432.     AX = 7802h
  433.     ES:DI -> 8-byte buffer to be filled
  434. Return: AL = 00h if no user logged on to Extended Services
  435.     AL <> 00h if user logged on to Extended Services
  436.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  437. --------D-2A80-------------------------------
  438. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  439.     AH = 80h
  440.     AL = critical section number (00h-0Fh)
  441.         01h DOS kernel, SHARE.EXE, DOSMGR
  442.         apparently for maintaining the integrity of DOS/SHARE/NET
  443.           data structures
  444.         02h DOS kernel, DOSMGR
  445.         ensures that no multitasking occurs while DOS is calling an
  446.           installable device driver
  447.         05h network redirector
  448.         06h DOS 4.x only IFSFUNC
  449.         08h ASSIGN.COM
  450.         0Ah MSCDEX
  451.         0Fh IBM PC LAN server (while intercepting INT 10/AH=06h,07h,0Eh)
  452. Notes:    normally hooked to avoid interrupting a critical section, rather than
  453.       called
  454.     the handler should ensure that none of the critical sections are
  455.       reentered, usually by suspending a task which attempts to reenter
  456.       an active critical section
  457.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  458.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  459.       beginning at offset -11 from the Swappable Data Area
  460.       (see INT 21/AX=5D06h); each word contains the offset within the
  461.       DOS data segment of a byte which must be changed from C3h (RET)
  462.       to 50h (POP AX) under DOS 3.x or from 00h to a nonzero value under
  463.       DOS 4+ to enable use of critical sections.  For DOS 4+, all words in
  464.       this list point at the byte at offset 0D0Ch.
  465. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  466. --------D-2A81-------------------------------
  467. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  468.     AH = 81h
  469.     AL = critical section number (00h-0Fh) (see AH=80h)
  470. Notes:    normally hooked rather than called
  471.     the handler should reawaken any tasks which were suspended due to an
  472.       attempt to enter the specified critical section
  473. SeeAlso: AH=80h,AH=82h,AX=8700h
  474. --------D-2A82-------------------------------
  475. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  476.     AH = 82h
  477. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  478.       greater than 0Ch except 59h, and on process termination
  479.     the handler should reawaken any tasks which were suspended due to an
  480.       attempt to enter one of the critical sections 0 through 7
  481. SeeAlso: AH=81h
  482. --------N-2A84-------------------------------
  483. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  484.     AH = 84h
  485. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  486.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  487.       software to process requests
  488. SeeAlso: INT 28
  489. --------N-2A86-------------------------------
  490. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  491.     AH = 86h
  492.     ???
  493. Return: ???
  494. SeeAlso: AH=07h,AH=C4h
  495. --------P-2A8700-----------------------------
  496. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  497.     AX = 8700h
  498.     CF clear
  499. Return: CF clear if OK to print in background now
  500.     CF set if background printing not allowed at this time
  501. Desc:    used to inform interested programs that PRINT is about to start its
  502.       background processing, and allow those programs to postpone the
  503.       processing if necessary
  504. Notes:    when PRINT gains control and wants to begin printing, it calls this
  505.       function.  If CF is clear on return, PRINT begins its background
  506.       processing, and calls AX=8701h when it is done.  If CF is set on
  507.       return, PRINT will relinquish control immediately, and will not
  508.       call AX=8701h
  509.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  510.       prevent background printing while its own code is active
  511. SeeAlso: AH=80h,AH=81h,AX=8701h
  512. --------P-2A8701-----------------------------
  513. INT 2A CU - PRINT - END BACKGROUND PRINTING
  514.     AX = 8701h
  515. Desc:    used to inform interested programs that PRINT has completed its
  516.       background processing
  517. Note:    called by PRINT after it has performed some background printing; not
  518.       called if AX=8700h returned with CF set.
  519. SeeAlso: AX=8700h
  520. --------N-2A89-------------------------------
  521. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  522.     AH = 89h
  523.     AL = ???  (ASSIGN uses 08h)
  524.     ???
  525. Return: ???
  526. --------I-2A90-------------------------------
  527. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  528.     AH = 90h
  529.     ???
  530. Return: ???
  531. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  532.       03h-07h,0Ch-11h
  533. --------N-2AC2-------------------------------
  534. INT 2A U - Network - ???
  535.     AH = C2h
  536.     AL = subfunction
  537.         07h ???
  538.         08h ???
  539.     BX = 0001h
  540.     ???
  541. Return: ???
  542. Note:    this function is called by the DOS 3.30-6.00 APPEND
  543. --------N-2AC4-------------------------------
  544. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  545.     AH = C4h
  546.     AL = subfunction
  547.         07h ???
  548.         08h ???
  549.     BX = ???
  550.     ???
  551. Return: ???
  552. SeeAlso: AH=86h
  553. --------N-2AD800-----------------------------
  554. INT 2A U - Novell NetWare Lite - SERVER - SET ???
  555.     AX = D800h
  556. Return: nothing
  557. Desc:    sets ??? flag, and sets ??? to initial value
  558. Note:    called by CLIENT
  559. SeeAlso: AX=D801h,AX=D850h
  560. --------N-2AD801-----------------------------
  561. INT 2A U - Novell NetWare Lite - SERVER - RESET ???
  562.     AX = D801h
  563. Return: nothing
  564. Desc:    clears the ??? flag set by AX=D800h
  565. Note:    called by CLIENT
  566. SeeAlso: AX=D800h,AX=D850h
  567. --------N-2AD850-----------------------------
  568. INT 2A U - Novell NetWare Lite - CLIENT - INCREMENT ???
  569.     AX = D850h
  570. Return: nothing
  571. Desc:    increments an internal byte-sized counter
  572. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  573.       Advanced NetWare 4.0 DOS Requester
  574. SeeAlso: AX=D851h
  575. --------N-2AD851-----------------------------
  576. INT 2A U - Novell NetWare Lite - CLIENT - RESET ???
  577.     AX = D851h
  578. Return: nothing
  579. Desc:    resets an internal byte-sized counter to zero
  580. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  581.       Advanced NetWare 4.0 DOS Requester
  582. SeeAlso: AX=D850h
  583. --------N-2AD852-----------------------------
  584. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  585.     AX = D852h
  586. Return: ???
  587. Note:    calls the NetWare Lite SERVER installation check, and sets ??? pointer
  588. SeeAlso: AX=D853h,INT 2F/AX=D880h
  589. --------N-2AD853-----------------------------
  590. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  591.     AX = D853h
  592. Return: ???
  593. Note:    clears the pointer set by AX=D852h
  594. SeeAlso: AX=D852h
  595. --------N-2AE0-------------------------------
  596. INT 2A U - PC Network 1.00 - ???
  597.     AH = E0h
  598.     AL = subfunction??? (01h,02h, maybe others)
  599.     ???
  600. Return: ???
  601. Note:    called by PCNet 1.00 NET.COM, a shell program from which others are run
  602. --------N-2AFF90-----------------------------
  603. INT 2A - PC/TCP PREDIR.EXE - ???
  604.     AX = FF90h
  605. Return: AX = ???
  606. Note:    PREDIR.EXE is the network printer redirector included as part of the
  607.       PC/TCP system by FTP Software, Inc.
  608. --------N-2AFF91-----------------------------
  609. INT 2A - PC/TCP PREDIR.EXE - ???
  610.     AX = FF91h
  611.     BX = ???
  612. Return: AX = status???
  613. --------N-2AFF92-----------------------------
  614. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  615.     AX = FF92h
  616. Return: AX = 0000h if installed
  617.        BX = redirected printer port (FFFFh if no printers redirected)
  618.        CX = version (CH = major, CL = minor)
  619. Note:    PREDIR.EXE is the network printer redirector included as part of the
  620.       PC/TCP system by FTP Software, Inc.
  621. --------N-2AFF93-----------------------------
  622. INT 2A - PC/TCP PREDIR.EXE - ???
  623.     AX = FF93h
  624. Return: AX = ???
  625. --------N-2AFF94-----------------------------
  626. INT 2A - PC/TCP PREDIR.EXE - ???
  627.     AX = FF94h
  628.     BX = ???
  629.     CX = ???
  630.     DX = ???
  631. Return: AX = ???
  632. Note:    PREDIR.EXE is the network printer redirector included as part of the
  633.       PC/TCP system by FTP Software, Inc.
  634. --------N-2AFF95-----------------------------
  635. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  636.     AX = FF95h
  637.     CX = what to get
  638.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  639.         0001h spooling program
  640.         0002h ???
  641.         0003h spool file name
  642.         0004h swap file name
  643. Return: AX = status
  644.         0000h successful
  645.     BX:DX -> ASCIZ configuration string
  646. --------N-2AFF96-----------------------------
  647. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  648.     AX = FF96h
  649.     CX = what to set
  650.         0000h ???
  651.         0001h print-on-hotkey state
  652.         0002h print-on-exit state
  653.         0003h print job timeout in clock ticks
  654.         0004h print-on-EOF state
  655.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  656. Return: AX = ???
  657. SeeAlso: AX=FF97h
  658. Note:    PREDIR.EXE is the network printer redirector included as part of the
  659.       PC/TCP system by FTP Software, Inc.
  660. --------N-2AFF97-----------------------------
  661. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  662.     AX = FF97h
  663.     CX = what to get
  664.         0000h ???
  665.         0001h print-on-hotkey state
  666.         0002h print-on-exit state
  667.         0003h print job timeout in clock ticks
  668.         0004h print-on-EOF state
  669. Return: AX = status
  670.         0000h successful
  671.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  672. SeeAlso: AX=FF96h
  673. --------D-2B---------------------------------
  674. INT 2B - DOS 2+ - RESERVED
  675. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  676. --------D-2C---------------------------------
  677. INT 2C - DOS 2+ - RESERVED
  678. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  679. --------O-2C---------------------------------
  680. INT 2C - STARLITE architecture - KERNEL API
  681. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  682.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  683.       be released in 1991.    The interrupt number is subject to change
  684.       before the actual release.
  685. --------m-2C---------------------------------
  686. INT 2C R - RM386 v6.00 - CLOAKING - CALL PROTECTED-MODE PASSALONG CHAIN
  687. Note:    when this interrupt is invoked in V86 mode, RM386 will invoke the first
  688.       in a chain of protected-mode handlers, and will only pass execution
  689.       to the V86-mode INT 2C handler if none of the handlers in the
  690.       passalong chain handle the call instead.  This is the method by which
  691.       the real-mode stub of a cloaked application communicates with the
  692.       protected-mode portion.
  693. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  694.       Netroom
  695. SeeAlso: INT 2C/AX=0009h
  696. --------m-2C0000-----------------------------
  697. INT 2C P - RM386 v6.00 - CLOAKING - ALLOCATE GDT SELECTOR
  698.     AX = 0000h
  699.     EBX = base address
  700.     CL = access mode byte
  701.     CH = extended access mode byte (omit limit field)
  702.     EDX = segment limit
  703. Return: CF clear if successful
  704.         AX = selector
  705.     CF set on error
  706.         AX = error code (see below)
  707. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  708.       Netroom
  709. Note:    this INT 2C interface is used by Netroom's DPMI.EXE v3.00
  710. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=0004h,AX=0005h,INT 31/AH=57h
  711.  
  712. Values for error code:
  713.  0001h    no more selectors
  714.  0002h    not a GDT ring 0 selector
  715.  0003h    invalid selector (out of range, not user selector)
  716.  0004h    selector not allocated
  717. --------m-2C0001-----------------------------
  718. INT 2C P - RM386 v6.00 - CLOAKING - FREE GDT SELECTOR
  719.     AX = 0001h
  720.     SI = selector
  721. Return: CF clear if successful
  722.     CF set on error
  723.         AX = error code (see AX=0000h)
  724. SeeAlso: AX=0000h
  725. --------m-2C0002-----------------------------
  726. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT BASE ADDRESS
  727.     AX = 0002h
  728.     SI = selector
  729.     EBX = new physical base addres
  730. Return: CF clear if successful
  731.     CF set on error
  732.         AX = error code (see AX=0000h)
  733. Return: AX=0000h,AX=0003h,AX=0004h,INT 31/AX=0007h
  734. --------m-2C0003-----------------------------
  735. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT LIMIT
  736.     AX = 0003h
  737.     SI = selector
  738.     EBX = new limit
  739. Return: CF clear if successful
  740.     CF set on error
  741.         AX = error code (see AX=0000h)
  742. SeeAlso: AX=0000h,AX=0002h,AX=0004h,INT 31/AX=0008h
  743. --------m-2C0004-----------------------------
  744. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT ACCESS MODE
  745.     AX = 0004h
  746.     SI = selector
  747.     CL = new access mode byte
  748. Return: CF clear if successful
  749.     CF set on error
  750.         AX = error code (see AX=0000h)
  751. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0005h,INT 31/AX=0009h
  752. --------m-2C0005-----------------------------
  753. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT EXTENDED ACCESS MODE
  754.     AX = 0005h
  755.     SI = selector
  756.     CL = new extended access mode byte (limit field ignored)
  757. Return: CF clear if successful
  758.     CF set on error
  759.         AX = error code (see AX=0000h)
  760. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0004h,INT 31/AX=0009h
  761. --------m-2C0006-----------------------------
  762. INT 2C P - RM386 v6.00 - CLOAKING - GET PROTECTED-MODE INTERRUPT VECTOR
  763.     AX = 0006h
  764.     CL = vector
  765. Return: CF clear
  766.     DX:EBX -> current interrupt handler
  767. SeeAlso: AX=0007h,INT 31/AX=0204h
  768. --------m-2C0007-----------------------------
  769. INT 2C P - RM386 v6.00 - CLOAKING - SET PROTECTED-MODE INTERRUPT VECTOR
  770.     AX = 0007h
  771.     CL = vector
  772.     DX:EBX -> interrupt handler
  773. Return: CF clear
  774. SeeAlso: AX=0006h,INT 31/AX=0205h
  775. --------m-2C0008-----------------------------
  776. INT 2C P - RM386 v6.00 - CLOAKING - GET PASSALONG ADDRESS
  777.     AX = 0008h
  778. Return: CF clear
  779.     DX:EBX = current passalong address
  780. SeeAlso: AX=0009h,AX=002Ch
  781. --------m-2C0009-----------------------------
  782. INT 2C P - RM386 v6.00 - CLOAKING - SET PASSALONG ADDRESS
  783.     AX = 0009h
  784.     DX:EBX = new value for passalong address
  785. Return: CF clear
  786. Note:    when an INT 2C instruction is executed in V86 mode, RM386 calls the
  787.       passalong address.  The handler should check whether the upcall
  788.       is of interest to it, and if not it should jump to the old passalong
  789.       address (retrieved with AX=0008h before the handler was installed)
  790. SeeAlso: AX=0008h,AX=002Dh,INT 2C"CLOAKING"
  791.  
  792. Passalong address called with:
  793.     EAX = CS:IP of byte following INT 2C instruction invoking passalong
  794.     SS:EBX -> caller registers (see below)
  795.     CF clear
  796.     others undefined
  797. Return: CF clear: pass along to V86-mode INT 2C handler
  798.     CF set: return immediately to V86 mode
  799.  
  800. Format of caller registers:
  801. Offset    Size    Description
  802.  00h    DWORD    EDI
  803.  04h    DWORD    ESI
  804.  08h    DWORD    EBP
  805.  0Ch    DWORD    reserved (ESP from PUSHAD instruction)
  806.  10h    DWORD    EBX
  807.  14h    DWORD    EDX
  808.  18h    DWORD    ECX
  809.  1Ch    DWORD    EAX
  810.  20h    DWORD    error code
  811.  24h    DWORD    EIP
  812.  28h    WORD    CS
  813.  2Ah    WORD    padding
  814.  2Ch    DWORD    EFLAGS
  815.  30h    DWORD    ESP
  816.  34h    WORD    SS
  817.  36h    WORD    padding
  818. --remainder not available if protected-mode ring3 trap---
  819.  38h    WORD    ES
  820.  3Ah    WORD    padding
  821.  3Ch    WORD    DS
  822.  3Eh    WORD    padding
  823.  40h    WORD    FS
  824.  42h    WORD    padding
  825.  44h    WORD    GS
  826.  46h    WORD    padding
  827. --------m-2C000A-----------------------------
  828. INT 2C P - RM386 v6.00 - CLOAKING - GET BASE ADDRESS OF GDT SELECTOR
  829.     AX = 000Ah
  830.     SI = selector
  831. Return: CF clear if successful
  832.         EBX = segment base address
  833.     CF set on error
  834.         AX = error code (see AX=0000h)
  835. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  836.       Netroom
  837. SeeAlso: AX=0000h,AX=0002h,AX=000Bh
  838. --------m-2C000B-----------------------------
  839. INT 2C P - RM386 v6.00 - CLOAKING - GET SELECTOR LIMIT
  840.     AX = 000Bh
  841.     SI = selector
  842. Return: CF clear if successful
  843.         EBX = segment base address
  844.     CF set on error
  845.         AX = error code (see AX=0000h)
  846. SeeAlso: AX=000Ah
  847. --------m-2C---------------------------------
  848. INT 2C P - RM386 v6.00 - CLOAKING - RESERVED FOR CLOAKED BIOS USE UNDER WINDOWS
  849.     AX = function (000Ch-001Fh)
  850. --------m-2C0020-----------------------------
  851. INT 2C P - RM386 v6.00 - CLOAKING - GET SIZE OF PROTECTED-MODE STATE
  852.     AX = 0020h
  853. Return: EAX = number of bytes required for storing state
  854. SeeAlso: AX=0021h,AX=0022h
  855. --------m-2C0021-----------------------------
  856. INT 2C P - RM386 v6.00 - CLOAKING - SAVE PROTECTED-MODE STATE
  857.     AX = 0021h
  858.     ES:EDI -> buffer for protected-mode state
  859. Return: CF clear
  860.     buffer filled
  861. SeeAlso: AX=0020h,AX=0022h
  862. --------m-2C0022-----------------------------
  863. INT 2C P - RM386 v6.00 - CLOAKING - RESTORE PROTECTED-MODE STATE
  864.     AX = 0022h
  865.     DS:ESI -> buffer containing previously-saved protected-mode state
  866. Return: CF clear if successful
  867.         state restored
  868.     CF set on error (invalid buffer contents)
  869. SeeAlso: AX=0020h,AX=0021h
  870. --------m-2C0023-----------------------------
  871. INT 2C P - RM386 v6.00 - CLOAKING - ISSUE PROTECTED-MODE XMS CALL
  872.     AX = 0023h
  873. Note:    not currently implemented--NOP in RM386 v6.00
  874. --------m-2C0024-----------------------------
  875. INT 2C P - RM386 v6.00 - CLOAKING - SET V86-MODE STACK
  876.     AX = 0024h
  877.     DX:EBX = new value for V86-mode SS:ESP
  878. Return: nothing
  879. --------m-2C0025-----------------------------
  880. INT 2C P - RM386 v6.00 - CLOAKING - CALL V86-MODE PROCEDURE
  881.     AX = 0025h
  882.     DS:EBX -> client register structure (see AX=0009h)
  883. Return: CF clear if successful
  884.         client register structure updated
  885.     CF set if no more nested procedure call space available
  886. Note:    this call uses the V86-mode stack supplied in the client structure, and
  887.       calls the routine specified by CS:IP in the client structure
  888. SeeAlso: AX=0026h,AX=0027h,INT 31/AX=0301h
  889. --------m-2C0026-----------------------------
  890. INT 2C P - RM386 v6.00 - CLOAKING - CALL V86-MODE INTERRUPT HANDLER
  891.     AX = 0026h
  892.     DS:EBX -> client register structure (see AX=0009h)
  893.     CX = interrupt number
  894. Return: CF clear if successful
  895.         client register structure updated
  896.     CF set if no more nested procedure call space available
  897. Note:    this call uses the V86-mode stack supplied in the client structure
  898. SeeAlso: AX=0025h,AX=0027h,INT 31/AX=0300h
  899. --------m-2C0027-----------------------------
  900. INT 2C P - RM386 v6.00 - CLOAKING - CHAIN TO V86-MODE INTERRUPT HANDLER
  901.     AX = 0027h
  902.     DS:EBX -> client register structure (see AX=0009h)
  903. Return: CF clear if successful
  904.         client register structure updated
  905.     CF set if no more nested procedure call space available
  906. Note:    this call uses the V86-mode stack supplied in the client structure,
  907.       and jumps to the address specified by CS:IP in the client structure
  908. SeeAlso: AX=0025h,AX=0026h
  909. --------m-2C0028-----------------------------
  910. INT 2C P - RM386 v6.00 - CLOAKING - GET ESP0 FROM TSS
  911.     AX = 0028h
  912. Return: CF clear
  913.     EAX = TSS's ESP0
  914. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  915.       Netroom
  916. --------m-2C0029-----------------------------
  917. INT 2C P - RM386 v6.00 - CLOAKING - SET SECONDARY STACK
  918.     AX = 0029h
  919.     DX:EBX = new value for SS:ESP of ring 3 secondary stack
  920. Return: CF clear
  921. Desc:    inform RM386 of the ring 3 interrupt stack location
  922. --------m-2C002A-----------------------------
  923. INT 2C P - RM386 v6.00 - CLOAKING - SET 8259 IRQ BASE VECTORS
  924.     AX = 002Ah
  925.     BL = base vector of master interrupt controller
  926.     CL = base vector of slave interrupt controller
  927. Note:    this call merely informs RM386 that the caller has changed the
  928.       interrupt mappings
  929. SeeAlso: INT 67/AX=DE0Bh
  930. --------m-2C002BCH81-------------------------
  931. INT 2C P - RM386 v6.00 - CLOAKING - PROTECTED-MODE VIRTUAL DMA SERVICES
  932.     AX = 002Bh
  933.     CH = 81h
  934.     CL = subfunction (02h-0Ch)
  935.     other registers as appropriate for subfunction
  936. Return: varies by function
  937.     CF set on error
  938. Note:    these functions are equivalent to the INT 4B/AX=81xxh subfunctions
  939.       with the same numbers
  940. SeeAlso: INT 4B/AX=8102h,INT 4B/AX=810Ch
  941. --------m-2C002C-----------------------------
  942. INT 2C P - RM386 v6.00 - CLOAKING - GET PORT-TRAPPING PASSALONG
  943.     AX = 002Ch
  944. Return: CF clear
  945.     DX:EBX = current I/O trapping passalong address
  946. SeeAlso: AX=0008h,AX=002Dh
  947. --------m-2C002D-----------------------------
  948. INT 2C P - RM386 v6.00 - CLOAKING - SET PORT-TRAPPING PASSALONG
  949.     AX = 002Dh
  950.     DX:EBX = new I/O trapping passalong address
  951. Return: CF clear
  952. Note:    RM386 calls the passalong address whenever an access to a monitored
  953.       I/O port is attempted; the handler should check whether it is a port
  954.       that it is interested in, and if not call the previous passalong
  955.       address (which was retrieved with AX=002Ch before installing the
  956.       new handler)
  957. SeeAlso: AX=0009h,AX=002Ch,INT 67/AX=5DEAh
  958.  
  959. Port-trapping passalong address called with:
  960.     EAX = CS:IP of faulting instruction (unless executing in protected-mode
  961.         ring 3)
  962.     SS:EBX -> caller register structure (see AX=0009h)
  963.         check EFLAGS V86-mode bit for type
  964.     CX = first two bytes of I/O instruction which was trapped
  965.     DX = port to which I/O is being performed
  966.     CF clear
  967. Return: CF clear if RM386 should perform I/O operation
  968.     CF set if I/O should be skipped
  969. Note:    RM386 skips the trapped I/O instruction, so the passalong handler
  970.       should not modify the client CS:EIP
  971. --------m-2C002E-----------------------------
  972. INT 2C P - RM386 v6.00 - CLOAKING - TRAP I/O PORT
  973.     AX = 002Eh
  974.     DX = port number to trap
  975. Return: CF clear if successful
  976.     CF set on error (port out of range or reserved)
  977. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  978.       Netroom
  979. SeeAlso: AX=002Fh,AX=0030h
  980. --------m-2C002F-----------------------------
  981. INT 2C PU - RM386 v6.00 - CLOAKING - UNTRAP I/O PORT
  982.     AX = 002Fh
  983.     DX = port number for which to cancel trapping
  984. Return: CF clear if successful
  985.     CF set on error (port out of range or reserved)
  986. SeeAlso: AX=002Eh,AX=0030h
  987. --------m-2C0030-----------------------------
  988. INT 2C PU - RM386 v6.00 - CLOAKING - GET TRAPPING STATE OF SPECIFIED PORT
  989.     AX = 0030h
  990.     DX = port number
  991. Return: CF clear if successful
  992.        BX = current state (0000h not trapped, 0001h trapped)
  993.     CF set on error (port out of range or reserved)
  994. SeeAlso: AX=002Eh,AX=002Fh
  995. --------m-2C0031-----------------------------
  996. INT 2C PU - RM386 v6.00 - BUG
  997.     AX = 0031h
  998. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  999.       Netroom
  1000. Note:    due to a fencepost error, RM386 v6.00 will branch unpredictably if
  1001.       invoked with this function
  1002. --------D-2D---------------------------------
  1003. INT 2D - DOS 2+ - RESERVED
  1004. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  1005. --------t-2D---------------------------------
  1006. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5.1]
  1007.     AH = multiplex number
  1008.     AL = function
  1009.         00h installation check
  1010.         Return: AL = 00h if free
  1011.             AL = FFh if multiplex number in use
  1012.                 CX = binary version number (CH = major, CL = minor)
  1013.                 DX:DI -> signature string (see below) identifying
  1014.                     the program using the multiplex number
  1015.         01h get entry point
  1016.         Return: AL = 00h if all API calls via INT 2D
  1017.             AL = FFh if entry point supported
  1018.                 DX:BX -> entry point for bypassing interrupt chain
  1019.         02h uninstall
  1020.         DX:BX = return address for successful uninstall (may be
  1021.             ignored by TSR)
  1022.         Return: AL = status
  1023.                 00h not implemented
  1024.                 01h unsuccessful
  1025.                 02h can not uninstall yet, will do so when able
  1026.                 03h safe to remove, but no resident uninstaller
  1027.                 (TSR still enabled)
  1028.                 BX = segment of memory block with resident code
  1029.                 04h safe to remove, but no resident uninstaller
  1030.                 (TSR now disabled)
  1031.                 BX = segment of memory block with resident code
  1032.                 05h not safe to remove now, try again later
  1033.                 FFh successful
  1034.             return at DX:BX with AX destroyed if successful and
  1035.               TSR honors specific return address
  1036.         03h request pop-up
  1037.         Return: AL = status
  1038.                 00h not implemented or TSR is not a pop-up
  1039.                 01h can not pop up at this time, try again later
  1040.                 02h can not pop up yet, will do so when able
  1041.                 03h already popped up
  1042.                 04h unable to pop up, user intervention required
  1043.                 BX = standard reason code
  1044.                     0000h unknown failure
  1045.                     0001h interrupt chain passes through memory
  1046.                       which must be swapped out to pop up
  1047.                     0002h swap-in failed
  1048.                 CX = application's reason code if nonzero
  1049.                 FFh TSR popped up and was exited by user
  1050.                 BX = return value
  1051.                     0000h no return value
  1052.                     0001h TSR unloaded
  1053.                     0002h-00FFh reserved
  1054.                     0100h-FFFFh application-dependent
  1055.         04h determine chained interrupts
  1056.         BL = interrupt number (except 2Dh)
  1057.         Return: AL = status
  1058.                 00h not implemented
  1059.                 01h (obsolete) unable to determine
  1060.                 02h (obsolete) interrupt hooked
  1061.                 03h (obsolete) interrupt hooked, address returned
  1062.                 DX:BX -> TSR's interrupt BL handler
  1063.                 04h list of hooked interrupts returned
  1064.                 DX:BX -> interrupt hook list (see below)
  1065.                 FFh interrupt not hooked
  1066.         Notes:    since INT 2D is known to be hooked, the resident code
  1067.               need not test for BL=2Dh (to minimize its size), and
  1068.               the return value is therefore undefined in that case.
  1069.             BL is ignored if the TSR returns AL=04h; in that case,
  1070.               the caller needs to scan the return list rather than
  1071.               making additional calls to this function.  If the
  1072.               return is not 00h or 04h, then the caller must cycle
  1073.               through the remaining interrupt numbers it wishes to
  1074.               check.
  1075.             return values 01h thru 03h are disparaged and will be
  1076.               removed from the next version of this specification;
  1077.               they are included for compatibility with version 3.3,
  1078.               though they were probably never used in any
  1079.               implementation
  1080.         05h get hotkeys
  1081.         Return: AL = status
  1082.                 00h not implemented
  1083.                 FFh supported
  1084.                 DX:BX -> hotkey list (see below)
  1085.         06h-0Fh reserved for future enhancements
  1086.         Return: AL = 00h (not implemented)
  1087.         other  application-dependent
  1088. Notes:    programs should not use fixed multiplex numbers; rather, a program
  1089.       should scan all multiplex numbers from 00h to FFh, remembering the
  1090.       first unused multiplex in case the program is not yet installed.
  1091.       For multiplex numbers which are in use, the program should compare
  1092.       the first 16 bytes of the signature string to determine whether it
  1093.       is already installed on that multiplex number.  If not previously
  1094.       installed, it should use the first free multiplex number.
  1095.     functions other than 00h are not valid unless a program is installed
  1096.       on the selected multiplex number
  1097.     to be considered fully compliant with version 3.5 of the specification,
  1098.       programs must implement at least functions 00h, 02h (no resident
  1099.       uninstall code required), and 04h (return value 04h).     TSRs that
  1100.       provide hotkeys with which the user can activate them must also
  1101.       implement function 05h.  The absolute minimum fully-compliant
  1102.       implementation has an overhead of 64 bytes (80 bytes with function
  1103.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  1104.       protocol header and hook list entry).
  1105.     the signature string and description may be used by memory mappers
  1106.       to display the installed programs
  1107.     users of this proposal should adhere to the IBM interrupt sharing
  1108.       protocol (see below), which will permit removal of TSRs in
  1109.       arbitrary order and interrupt handler reordering.  All TSRs
  1110.       following this proposal should be removable, though they need not
  1111.       keep the code for removing themselves resident; it is acceptable
  1112.       for a separate program to perform the removal.
  1113.     A sample implementation including example TSRs and utility programs
  1114.       may be found in a separate package distributed as AMISLnnn.ZIP
  1115.       (AMISL091.ZIP as of this writing).
  1116.     Please let me know if you choose to follow this proposal.  The
  1117.       signature and a list of the private API calls you use would be
  1118.       appreciated, as well.
  1119. SeeAlso: INT 2F
  1120. Index:    installation check;Alternate Multiplex Interrupt Specification
  1121. Index:    installation check;AMIS|installation check;FASTMOUS
  1122. Index:    installation check;SPELLER|installation check;Monitor
  1123. Index:    installation check;NOLPT|installation check;NOTE
  1124. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  1125. Index:    installation check;VGABLANK|installation check;EATMEM
  1126. Index:    installation check;RECALL|installation check;XPTR2
  1127. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  1128. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  1129.  
  1130. Format of signature string:
  1131. Offset    Size    Description
  1132.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  1133.  08h  8 BYTEs    blank-padded product name
  1134.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  1135. Note:    it is not necessary to reserve a full 64 bytes for the description,
  1136.       just enough to store the actual ASCIZ string
  1137.  
  1138. Format of interrupt hook list [array]:
  1139. Offset    Size    Description
  1140.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  1141.  01h    WORD    offset within hook list's segment of the interrupt handler
  1142.         this will point at the initial short jump of the interrupt
  1143.         sharing protocol header (see below)
  1144.  
  1145. Format of hotkey list:
  1146. Offset    Size    Description
  1147.  00h    BYTE    type of hotkey checking
  1148.         bit 0: checks before chaining INT 09
  1149.         bit 1: checks after chaining INT 09
  1150.         bit 2: checks before chaining INT 15/AH=4Fh
  1151.         bit 3: checks after chaining INT 15/AH=4Fh
  1152.         bit 4: checks on INT 16/AH=00h,01h,02h
  1153.         bit 5: checks on INT 16/AH=10h,11h,12h
  1154.         bit 6: checks on INT 16/AH=20h,21h,22h
  1155.         bit 7: reserved (0)
  1156.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  1157.  02h 6N BYTEs    array of hotkey definitions
  1158.         (one per hotkey, first should be primary hotkey)
  1159.         Offset    Size    Description
  1160.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  1161.                 hotkey triggers on release if bit 7 set
  1162.          01h    WORD    required shift states (see below)
  1163.          03h    WORD    disallowed shift states (see below)
  1164.          05h    BYTE    flags
  1165.                 bit 0: hotkey chained before processing
  1166.                 bit 1: hotkey chained after processing
  1167.                 bit 2: others should pass through this hotkey
  1168.                     so that it can be monitored
  1169.                 bit 3: hotkey will not activate if other keys
  1170.                     pressed/released before hotkey press is
  1171.                     completed
  1172.                 bit 4: this key is remapped into some other key
  1173.                 bit 5-7: reserved (0)
  1174. Notes:    except for bit 7, the shift states correspond exactly to the return
  1175.       values from INT 16/AH=12h.  A set bit in the required states word
  1176.       indicates that the corresponding shift state must be active when the
  1177.       hotkey's scan code is received for the hotkey to be recognized; a
  1178.       clear bit means that the corresponding state may be ignored.    A set
  1179.       bit in the disallowed shift states word indicates that the
  1180.       corresponding shift state must be inactive.
  1181.     if bit 2 is set, either control key may be pressed for the hotkey; if
  1182.       bits 8 and 10 are both set, then both control keys must be pressed.
  1183.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  1184.     for the disallowed-states word, if one of the "either" bits is set,
  1185.       then both the corresponding left bit and right bit must be set
  1186.     examples:
  1187.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  1188.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  1189.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  1190. Index:    hotkeys;AMIS
  1191.  
  1192. Bitfields for shift states:
  1193.  bit 0    right shift pressed
  1194.  bit 1    left shift pressed
  1195.  bit 2    either control key pressed
  1196.  bit 3    either Alt key pressed
  1197.  bit 4    ScrollLock active
  1198.  bit 5    NumLock active
  1199.  bit 6    CapsLock active
  1200.  bit 7    either shift key pressed
  1201.  bit 8    left control key pressed
  1202.  bit 9    left Alt key pressed
  1203.  bit 10 right control key pressed
  1204.  bit 11 right Alt key pressed
  1205.  bit 12 ScrollLock pressed
  1206.  bit 13 NumLock pressed
  1207.  bit 14 CapsLock pressed
  1208.  bit 15 SysRq key pressed
  1209.  
  1210. Format of interrupt sharing protocol interrupt handler entry point:
  1211. Offset    Size    Description
  1212.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  1213.         following this data block (EBh 10h)
  1214.  02h    DWORD    address of next handler in chain
  1215.  06h    WORD    signature 424Bh
  1216.  08h    BYTE    EOI flag
  1217.         00h software interrupt or secondary hardware interrupt handler
  1218.         80h primary hardware interrupt handler (will issue EOI)
  1219.  09h  2 BYTEs    short jump to hardware reset routine
  1220.         must point at a valid FAR procedure (may be just RETF)
  1221.  0Bh  7 BYTEs    reserved (0)
  1222.  
  1223. Signatures known to be in use:
  1224.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  1225.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  1226.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  1227.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  1228.  'DAISYCHA' 'INDRIVER'    Advanced Parallel Port daisy chain driver (vendor name
  1229.             in product description field, if desired)
  1230.             (see also INT 2D/AL=DCh)
  1231.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  1232.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  1233.  'heathh  ' 'Monitor '
  1234.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  1235.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  1236.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  1237.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  1238.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  1239.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  1240.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  1241.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  1242.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  1243.  'Ralf B  ' 'VGABLANK'    example TSR -- VGA-only screen blanker
  1244.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  1245.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  1246.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  1247.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  1248.             testing programs (v1.1+)
  1249.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  1250.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  1251. --------N-2D--10-----------------------------
  1252. INT 2D - RATSR 2.0+ - GET STATUS
  1253.     AL = 10h
  1254.     AH = AMIS multiplex number for RATSR
  1255. Return: AL = status
  1256.         01h listening (no connection)
  1257.         02h receiving          \
  1258.         03h sending               > station being monitored
  1259.         04h initializing receive  /
  1260.     AH = keyboard lock status (00h unlocked, 01h locked)
  1261. Program: RATSR is a utility by James Berry provided with
  1262.       RemoteAccess/Professional, a commercial bulletin board system, that
  1263.       allows remote control of a station over a network
  1264. SeeAlso: INT 2D"AMIS"
  1265. --------d-2D--10-----------------------------
  1266. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  1267.     AL = 10h
  1268.     AH = AMIS multiplex number for dLite
  1269. Return: CF clear if successful
  1270.         ES:BX -> parameter block (see below)
  1271.     CF set on error
  1272. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  1273.       expands compressed files when they are read
  1274. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  1275.  
  1276. Format of parameter block:
  1277. Offset    Size    Description
  1278.  00h    BYTE    TSR flags
  1279.         bit 0: deny FCB access
  1280.         bit 1: dLite sleeping rather than activated
  1281.         bit 2: always indicate original filesize when reading
  1282.             directory entries, rather than only for specified
  1283.             programs
  1284.         bits 3-7 reserved
  1285.  01h    WORD    maximum number of programs needing original filesize
  1286.  03h    WORD    current number of programs needing original filesize
  1287.  05h    WORD    maximum number of files that can be handled by dLite (should
  1288.         be the same as FILES= in CONFIG.SYS)
  1289.  07h    WORD    offset (in the same segment as the parameter block) of the
  1290.         table of programs needing the original filesize (8 bytes each,
  1291.         without path or extension, uppercase, and zero terminated if
  1292.         shorter than 8 bytes)
  1293. --------V-2D--10-----------------------------
  1294. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  1295.     AL = 10h
  1296.     AH = AMIS multiplex number for Burnout Plus
  1297. Return: AL = 01h
  1298.     BX = Burnout Plus status (see below)
  1299.     CX = Record of features loaded (see below)
  1300.     ES:DI -> Burnout Plus control structure (see below)
  1301. Program: Burnout Plus is a DOS screen saver from Cove Software
  1302. SeeAlso: INT 2D"AMIS"
  1303. Index:    screen saver;Burnout Plus
  1304.  
  1305. Bitfields for status:
  1306.  bit 0    screen is blanked
  1307.  bit 1    MS Windows is active (Burnout Plus deactivated)
  1308.  bits 2-15 reserved
  1309.  
  1310. Bitfields for features loaded/features enabled:
  1311.  bit 0    mouse activity monitor
  1312.  bit 1    passkey support
  1313.  bit 2    password support
  1314.  bit 3    continuous clear
  1315.  bit 4    software blanking
  1316.  bit 5    video activity monitor
  1317.  bit 6    disk activity monitor
  1318.  bit 7    activating keystroke suppression
  1319.  
  1320. Format of Burnout Plus control structure:
  1321. Offset    Size    Description
  1322.  00h    BYTE    size of structure in bytes
  1323.  01h    WORD    Burnout Plus version
  1324.  03h    WORD    screen blanking reset count in clock ticks
  1325.  05h    WORD    current countdown value in clock ticks
  1326.  07h    BYTE    type of timeout specification
  1327.  08h    BYTE    instant-blank hotkey
  1328.  09h    WORD    extended status information (see below)
  1329.         the bits for password, passkey, and software blanking are
  1330.           ignored and cannot be enabled or disabled externally
  1331.  0Bh    WORD    features enabled (see above)
  1332. Note:    all fields except the first two may be modified by external programs
  1333.       to affect the operation of Burnout Plus
  1334. Index:    hotkeys;Burnout Plus
  1335.  
  1336. Bitfields for extended status information:
  1337.  bit 0    Burnout Plus disabled
  1338.  bit 1    force screen to blank on next clock tick
  1339.  bit 2    restore screen if currently blanked
  1340.  bits 3-15 reserved
  1341. Note:    bits 1 and 2 are automatically cleared by Burnout Plus after blanking
  1342.       or restoring the screen
  1343. --------V-2D--10-----------------------------
  1344. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  1345.     AL = 10h
  1346.     AH = AMIS multiplex number for Screen Thief
  1347. Return: nothing
  1348. Program: Screen Thief is a graphics screen grabber
  1349. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  1350.       does not release the low-memory stub; this may be used to effect a
  1351.       partial uninstall if INT 2D/AL=02h fails
  1352. SeeAlso: INT D8"Screen Thief"
  1353. --------i-2D--10-----------------------------
  1354. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  1355.     AL = 10h
  1356.     AH = AMIS multiplex number for RAMLIGHT
  1357. Return: ES:BX -> array of fake device driver headers used in monitoring
  1358.     CX = number of drives being monitored???
  1359. --------d-2D--11-----------------------------
  1360. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  1361.     AL = 11h
  1362.     AH = AMIS multiplex number for dLite
  1363.     BX = file handle
  1364. Return: CF clear if successful
  1365.         DX:AX = size of uncompressed file
  1366.     CF set on error (not dPressed file)
  1367. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  1368. --------d-2D--12-----------------------------
  1369. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  1370.     AL = 12h
  1371.     AH = AMIS multiplex number for dLite
  1372.     BX = file handle
  1373. Return: CF clear if successful
  1374.         DX:AX = size of compressed file
  1375.     CF set on error (not dPressed file)
  1376. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  1377. --------b-2D--DC-----------------------------
  1378. INT 2D C - DAISY.SYS - BROADCAST: CHAIN RESCANNED
  1379.     AL = DCh
  1380.     AH = AMIS multiplex number for signature 'DAISYCHA' 'INDRIVER'
  1381.     DL = LPT Port Rescanned
  1382. Program: DAISY.SYS is a daisy chain manager for parallel port peripherals
  1383.       conforming to the Advanced Parallel Port Committee's daisy chain
  1384.       specification.
  1385. Desc:    This Broadcast is sent whenever daisy chain IDs are reassigned to
  1386.       warn parallel port device drivers that their daisy chain ID may
  1387.       have been changed.
  1388. Note:    This function is a callout from DAISY.SYS, NOT a call into DAISY.SYS
  1389. SeeAlso: INT 17/AX=0200h"Advanced Parallel Port"
  1390. --------l-2E---------------------------------
  1391. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  1392.     DS:SI -> commandline to execute (see below)
  1393. Return: all registers except CS:IP destroyed
  1394.     AX = status (4DOS v4.0)
  1395.        0000h successful
  1396.        FFFFh error before processing command (not enough memory, etc)
  1397.        other error number returned by command
  1398. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  1399.       internal commands) without loading another copy of COMMAND.COM
  1400.     if COMMAND.COM is the user's command interpreter, the primary copy
  1401.       executes the command; this allows the master environment to be
  1402.       modified by issuing a "SET" command, but changes in the master
  1403.       environment will not become effective until all programs descended
  1404.       from the primary COMMAND.COM terminate
  1405.     since COMMAND.COM processes the string as if typed from the keyboard,
  1406.       the transient portion needs to be present, and the calling program
  1407.       must ensure that sufficient memory to load the transient portion can
  1408.       be allocated by DOS if necessary
  1409.     results are unpredictable if invoked by a program run from a batch file
  1410.       because this call is not reentrant and COMMAND.COM uses the same
  1411.       internal variables when processing a batch file
  1412.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  1413.       has been loaded
  1414.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  1415.  
  1416. Format of commandline:
  1417. Offset    Size    Description
  1418.  00h    BYTE    length of command string, not counting trailing CR
  1419.  01h    var    command string
  1420.   N    BYTE    0Dh (CR)
  1421. --------O-2E---------------------------------
  1422. INT 2E UP - Windows NT - NATIVE API
  1423.     EAX = function number
  1424.     EDX = address of parameter block
  1425. Return: ???
  1426. --------l-2E----BXE22E-----------------------
  1427. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  1428.     BX = E22Eh
  1429.     DS:SI -> zero byte
  1430. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  1431. ----------2F---------------------------------
  1432. INT 2F - Multiplex - NOTES
  1433.     AH = identifier of program which is to handle the interrupt
  1434.        00h-7Fh reserved for DOS
  1435.        B8h-BFh reserved for networks
  1436.        C0h-FFh reserved for applications
  1437.     AL is the function code
  1438.    This is a general mechanism for verifying the presence of a TSR and
  1439.    communicating with it.  When searching for a free identifier code for AH
  1440.    using the installation check (AL=00h), the calling program should set
  1441.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  1442.    and SS:SP to be valid on return, since numerous programs now use additional
  1443.    registers on input and/or output for the installation check.
  1444. Notes:    Since the multiplex chain is growing so long, and beginning to
  1445.       experience multiplex number collisions, I am proposing an alternate
  1446.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  1447.       multiplex, please let me know.
  1448.     DOS and some other programs return values in the flags register, so
  1449.       any TSR which chains by calling the previous handler rather than
  1450.       jumping to it should ensure that the returned flags are preserved
  1451.       and passed back to the original caller
  1452. SeeAlso: INT 2D
  1453. --------t-2F---------------------------------
  1454. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  1455.     AH = xx (dynamically assigned based upon a search for a multiplex
  1456.          number which doesn't answer installed)
  1457.     AL = 00h installation check
  1458.     ES:DI = EBEBh:BEBEh
  1459. Return: AL = 00h not installed
  1460.          01h not installed, not OK to install
  1461.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  1462.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  1463.          short form of the manufacturer's name, PPPPPPPP is a product
  1464.          name and NNNN is the product's version number
  1465. --------t-2F---------------------------------
  1466. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  1467.     AH = programmer-selected multiplex number
  1468.     AL = function
  1469.         00h installation check
  1470.         Return: AL = FFh if installed
  1471.         01h get TSR interrupt vectors
  1472.         Return: DX:AX -> vector table (see below)
  1473.         02h get TSR code segment
  1474.         Return: AX = code segment for all interrupt handlers
  1475.         03h call user exit routine and release TSR's memory
  1476.         04h get signature string
  1477.         Return: DX:AX -> counted string containing signature
  1478.         05h get TSR's INT 2F handler
  1479.         Return: DX:AX -> INT 2F handler
  1480.         06h enable/disable TSR
  1481.         BL = new state (00h disabled, 01h enabled)
  1482.         07h activate TSR (popup if not disabled)
  1483.         08h get hotkeys
  1484.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  1485.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  1486.         09h set hotkey
  1487.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  1488.         CX = new hotkey (CH = keyflags, CL = scancode)
  1489.         0Ah-1Fh reserved
  1490. Index:    installation check;Ross Wentworth POPUP library
  1491. Index:    hotkeys;Ross Wentworth POPUP library
  1492.  
  1493. Format of vector table entry:
  1494. Offset    Size    Description
  1495.  00h    BYTE    vector number (00h = end of table)
  1496.  01h    DWORD    original vector
  1497.  05h    WORD    offset of interrupt handler in TSR's code segment
  1498. --------t-2F---------------------------------
  1499. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  1500.     AH = xx (dynamically assigned based upon a search for a multiplex
  1501.          number from C0h to FFh which doesn't answer installed)
  1502.     AL = 00h installation check
  1503.     ES:DI = 1492h:1992h
  1504. Return: AL = 00h not installed
  1505.          01h not installed, not OK to install
  1506.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  1507.          point to author_name_ver table (see below)
  1508.     AH = FFh
  1509. Note:    this interface permits advanced communication with TSRs: it is possible
  1510.       to make a generic uninstall utility, advanced TSR relocator programs
  1511.       in order to fit fragmented memory areas, etc.
  1512. See also: INT 2D"AMIS",INT 2F"Compuscience"
  1513. Index:    installation check;CiriSOFT TSR interface
  1514. Index:    uninstall;CiriSOFT TSR interface
  1515.  
  1516. Format of author_name_ver table:
  1517. Offset    Size    Description
  1518.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  1519.         with PSP, XMS upper memory segment if installed as UMB...)
  1520.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  1521.         in *.COM programs and 0 in upper memory TSR's).
  1522.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  1523.         used by TSR is possible to determine if hooked vectors are
  1524.         still pointing it (and if it is safe to uninstall).
  1525.  -10    BYTE    characteristics byte
  1526.         bits 0-2: 000 normal program (with PSP)
  1527.               001 upper XMS memory block (needed HIMEM.SYS function
  1528.                   to free memory when uninstalling)
  1529.               010 device driver (*.SYS)
  1530.               011 device driver in EXE format
  1531.               1xx others (reserved)
  1532.         bits 3-6 reserved
  1533.         bit 7 set if extra_table defined and supported
  1534.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  1535.         that the TSR must use THIS variable in it's INT 2Fh handler.
  1536.  -8    WORD    offset to vector_area table (see below)
  1537.  -6    WORD    offset to extra_area table (see bit 7 in offset -10 and below)
  1538.  -4   4 BYTEs    signature string "*##*"
  1539.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  1540.         is used in order to determine if the TSR is already resident
  1541.         and it's version code; the ':' char is used as delimiter)
  1542.  
  1543. Format of vector_area table:
  1544. Offset    Size    Description
  1545.  -1    BYTE    number of vectors intercepted by TSR
  1546.  00h    BYTE    first vector number
  1547.  01h    DWORD    first vector pointer before installing the TSR
  1548.  05h    BYTE    second vector number
  1549.  06h    DWORD    second vector pointer before installing the TSR
  1550.  0Ah    ...    (and so on)
  1551. Note:    the TSR must use these variables to invoke the previous interrupt
  1552.       handler routines
  1553.  
  1554. Format of extra_area table (needed only to improve relocation feature):
  1555. Offset    Size    Description
  1556.  00h    WORD    offset to external_ctrl table (0 if not supported)
  1557.  02h    WORD    reserved for future use (0)
  1558.  
  1559. Format of external_ctrl table:
  1560. Offset    Size    Description
  1561.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  1562.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  1563.  ---And if bit 0 in offset 00h is off:
  1564.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  1565.         /SR parameter (silent installation & inhibit)
  1566.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  1567.         from the previous TSR still resident
  1568.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  1569. --------c-2F00-------------------------------
  1570. INT 2F U - DOS 2.x only PRINT.COM - ???
  1571.     AH = 00h
  1572.     ???
  1573. Return: ???
  1574. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  1575.     values in AH other than 00h or 01h cause PRINT to return the number of
  1576.       files in the queue in AH
  1577. SeeAlso: AH=01h
  1578. --------P-2F00-------------------------------
  1579. INT 2F U - PSPRINT - PRINT JOB CONTROL
  1580.     AH = 00h
  1581.     ???
  1582. Return: ???
  1583. --------c-2F0080-----------------------------
  1584. INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  1585.     AX = 0080h
  1586. Return: after PRINT executes
  1587. Note:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  1588. --------c-2F01-------------------------------
  1589. INT 2F U - DOS 2.x only PRINT.COM - ???
  1590.     AH = 01h
  1591.     ???
  1592. Return: ???
  1593. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  1594.     values in AH other than 00h or 01h cause PRINT to return the number of
  1595.       files in the queue in AH
  1596. SeeAlso: AH=00h
  1597. --------c-2F0100-----------------------------
  1598. INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK
  1599.     AX = 0100h
  1600. Return: AL = status
  1601.         00h not installed
  1602.         01h not installed, but not OK to install
  1603.         FFh installed
  1604. SeeAlso: AX=0101h
  1605. --------c-2F0100SI20D6-----------------------
  1606. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  1607.     AX = 0100h
  1608.     SI = 20D6h
  1609.     DI = 8761h
  1610. Return: AX = 00FFh if installed
  1611.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  1612.         SI = resident code segment
  1613. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  1614.       LaserTools' PrintCache memory/disk-based print spooler package
  1615. Note:    if either of SI or DI differ from the indicated magic values, only AX
  1616.       will be modified on return, for compatibility with DOS PRINT
  1617. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  1618. --------c-2F0101-----------------------------
  1619. INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING
  1620.     AX = 0101h
  1621.     DS:DX -> submit packet (see below)
  1622. Return: CF clear if successful
  1623.         AL = status
  1624.         01h added to queue
  1625.         9Eh now printing
  1626.     CF set on error
  1627.         AX = error code (see below, also INT 21/AH=59h)
  1628. SeeAlso: AX=0102h
  1629.  
  1630. Format of submit packet:
  1631. Offset    Size    Description
  1632.  00h    BYTE    level (must be 00h)
  1633.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  1634.  
  1635. Values for PRINT error code:
  1636.  01h invalid function
  1637.  02h file not found
  1638.  03h path not found
  1639.  04h out of file handles
  1640.  05h access denied
  1641.  08h print queue full
  1642.  09h spooler busy
  1643.  0Ch name too long
  1644.  0Fh invalid drive
  1645. --------c-2F0101SI20D6-----------------------
  1646. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  1647.     AX = 0101h
  1648.     SI = 20D6h
  1649.     DI = 8761h
  1650.     DS:DX -> submit packet (see AX=0101h)
  1651.     CL = print options
  1652.         bit 4: use default options
  1653. Return: CF clear if successful
  1654.         AL = status
  1655.         01h added to queue
  1656.         9Eh now printing
  1657.     CF set on error
  1658.         AX = error code (see AX=0101h)
  1659. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  1660.       LaserTools' PrintCache memory/disk-based print spooler package
  1661. Note:    if either SI or DI differs from the indicated magic values on entry,
  1662.       PrintCache will use the default print options for the file for
  1663.       compatibility with DOS PRINT
  1664. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AX=0107h"PrintCache"
  1665. --------c-2F0102-----------------------------
  1666. INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  1667.     AX = 0102h
  1668.     DS:DX -> ASCIZ filename (wildcards allowed)
  1669. Return: CF clear if successful
  1670.     CF set on error
  1671.         AX = error code (see AX=0101h)
  1672. SeeAlso: AX=0101h,AX=0103h
  1673. --------c-2F0103-----------------------------
  1674. INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE
  1675.     AX = 0103h
  1676. Return: CF clear if successful
  1677.     CF set on error
  1678.         AX = error code (see AX=0101h)
  1679. SeeAlso: AX=0102h
  1680. --------c-2F0104-----------------------------
  1681. INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS
  1682.     AX = 0104h
  1683. Return: CF clear if successful
  1684.         DX = error count since status last read
  1685.         DS:SI -> print queue
  1686.     CF set on error
  1687.         AX = error code (see AX=0101h)
  1688. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  1689.       to avoid changing the list while it is being examined
  1690. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  1691.       an empty filename; the first name is the file currently being printed
  1692.     printing is stopped until AX=0105h is called to prevent the queue
  1693.       from changing while the filenames are being read
  1694. SeeAlso: AX=0101h,AX=0105h
  1695. --------c-2F0105-----------------------------
  1696. INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ
  1697.     AX = 0105h
  1698. Return: CF clear if successful
  1699.     CF set on error
  1700.         AX = error code (see AX=0101h)
  1701. Desc:    restart PRINT's activities once an application finishes examining the
  1702.       print queue
  1703. SeeAlso: AX=0104h
  1704. --------c-2F0106-----------------------------
  1705. INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE
  1706.     AX = 0106h
  1707. Return: CF set if files in print queue
  1708.         AX = error code 0008h (queue full)
  1709.         DS:SI -> device driver header
  1710.     CF clear if print queue empty
  1711.         AX = 0000h
  1712. Desc:    determine which device, if any, PRINT is currently using for output
  1713. Notes:    documented for DOS 5+, but not documented for prior versions
  1714.     this function can be used to allow a program to avoid printing to the
  1715.       printer on which PRINT is currently performing output
  1716. SeeAlso: AX=0104h
  1717. --------c-2F0107-----------------------------
  1718. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  1719.     AX = 0107h
  1720.     CL bit 0: output form feed between print jobs
  1721. Return: AL destroyed
  1722. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  1723. --------N-2F0200-----------------------------
  1724. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  1725.     AX = 0200h
  1726. Return: AL = FFh if installed
  1727. Desc:    determine whether the PC LAN Program redirector is installed
  1728. SeeAlso: AX=0201h,AX=0203h
  1729. --------N-2F0201-----------------------------
  1730. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1731.     AX = 0201h
  1732. Return: nothing???
  1733. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  1734.     AX=0202h appears to be the opposite function
  1735.     these functions are supposedly used to signal opening and closing of
  1736.       printers
  1737. SeeAlso: AX=0202h
  1738. --------N-2F0202-----------------------------
  1739. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1740.     AX = 0202h
  1741.     ???
  1742. Return: nothing???
  1743. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  1744.     these functions are supposedly used to signal opening and closing of
  1745.       printers
  1746. SeeAlso: AX=0201h
  1747. --------N-2F0203-----------------------------
  1748. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1749.     AX = 0203h
  1750. Return: nothing???
  1751. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  1752.     AX=0204h appears to be the opposite function
  1753.     these functions are supposedly used to signal opening and closing of
  1754.       printers
  1755. SeeAlso: AX=0200h,AX=0204h
  1756. --------N-2F0204-----------------------------
  1757. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1758.     AX = 0204h
  1759.     ???
  1760. Return: nothing???
  1761. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  1762.     AX=0203h appears to be the opposite function
  1763.     these functions are supposedly used to signal opening and closing of
  1764.       printers
  1765. SeeAlso: AX=0200h,AX=0203h
  1766. --------N-2F---------------------------------
  1767. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1768.     AX = 02xxh
  1769.     ???
  1770. Return: ???
  1771. --------l-2F0500-----------------------------
  1772. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  1773.     AX = 0500h
  1774. Return: AL = 00h not installed, OK to install
  1775.          01h not installed, can't install
  1776.          FFh installed
  1777. Desc:    determine whether a critical error message override is installed
  1778. Note:    this set of functions allows a user program to partially or completely
  1779.       override the default critical error handler's message in COMMAND.COM
  1780. SeeAlso: AH=05h,INT 24
  1781. --------l-2F05-------------------------------
  1782. INT 2F CU - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  1783.     AH = 05h
  1784. ---DOS 3.x---
  1785.     AL = extended error code (not zero)
  1786. ---DOS 4+ ---
  1787.     AL = error type
  1788.         01h DOS extended error code
  1789.         02h parameter error
  1790.     BX = error code
  1791. Return: CF clear if successful
  1792.         ES:DI -> ASCIZ error message (read-only)
  1793.         AL = completion state
  1794.         00h message requires completion with device name, drive, etc.
  1795.         01h message is complete as returned
  1796.     CF set if error code can't be converted to string
  1797.         AX,DI,ES destroyed
  1798.     other flags corrupted
  1799. Notes:    called at start of COMMAND.COM's default critical error handler if
  1800.       installed by a user program, allowing partial or complete overriding
  1801.       of the default error messages
  1802.     subfunction 02h is called by many DOS 4 external programs
  1803.     DR-DOS's COMMAND.COM appends additional info ("0 files copied") to the
  1804.       returned string
  1805. SeeAlso: AX=0500h,AX=122Eh,INT 24
  1806. --------U-2F0600-----------------------------
  1807. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  1808.     AX = 0600h
  1809. Return: AL = status
  1810.         00h not installed
  1811.         01h not installed, but not OK to install
  1812.         FFh installed
  1813. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  1814.       (see INT 21/AH=52h)
  1815.     undocumented prior to the release of DOS 5.0
  1816. SeeAlso: AX=0601h,INT 21/AH=52h
  1817. --------U-2F0601-----------------------------
  1818. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  1819.     AX = 0601h
  1820. Return: ES = segment of ASSIGN work area and assignment table
  1821. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  1822.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  1823. SeeAlso: AX=0600h
  1824. --------D-2F0800-----------------------------
  1825. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  1826.     AX = 0800h
  1827. Return: AL = 00h not installed, OK to install
  1828.          01h not installed, not OK to install
  1829.          FFh installed
  1830. Desc:    determine whether the internal support code used by DRIVER.SYS is
  1831.       present
  1832. Note:    supported by DR-DOS 5.0
  1833. --------D-2F0801-----------------------------
  1834. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  1835.     AX = 0801h
  1836.     DS:DI -> drive data table (see AX=0803h)
  1837. Return: AX,BX,SI,ES destroyed
  1838. Notes:    moves down internal list of drive data tables, copying and modifying
  1839.       the drive description flags word for tables referencing same physical
  1840.       drive
  1841.     the data table is appended to the chain of tables
  1842.     supported by DR-DOS 5.0
  1843. SeeAlso: AX=0803h
  1844. --------D-2F0802-----------------------------
  1845. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  1846.     AX = 0802h
  1847.     ES:BX -> device driver request header (see below)
  1848. Return: request header updated as per requested operation
  1849. Notes:    supported by DR-DOS 5.0
  1850.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  1851.       DOS 4+ executes this function on AL=02h and AL=04h-F7h
  1852.     the command codes and structures described below apply to all drivers
  1853.       which support the appropriate commands; this call is just one of a
  1854.       number of ways in which a device driver request may be invoked
  1855. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  1856.  
  1857. Values for command code:
  1858.  00h    INIT
  1859.  01h    MEDIA CHECK (block devices)
  1860.  02h    BUILD BPB (block devices)
  1861.  03h    IOCTL INPUT
  1862.  04h    INPUT
  1863.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  1864.  06h    INPUT STATUS (character devices)
  1865.  07h    INPUT FLUSH (character devices)
  1866.  08h    OUTPUT
  1867.  09h    OUTPUT WITH VERIFY
  1868.  0Ah    OUTPUT STATUS (character devices)
  1869.  0Bh    OUTPUT FLUSH (character devices)
  1870.  0Ch    IOCTL OUTPUT
  1871.  0Dh    (DOS 3+) DEVICE OPEN
  1872.  0Eh    (DOS 3+) DEVICE CLOSE
  1873.  0Fh    (DOS 3+) REMOVABLE MEDIA (block devices)
  1874.  10h    (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  1875.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  1876.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  1877.  13h    (DOS 3.2+) GENERIC IOCTL
  1878.  14h    unused
  1879.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  1880.  16h    unused
  1881.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  1882.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  1883.  19h    (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  1884.  80h    (CD-ROM) READ LONG
  1885.  81h    (CD-ROM) reserved
  1886.  82h    (CD-ROM) READ LONG PREFETCH
  1887.  83h    (CD-ROM) SEEK
  1888.  84h    (CD-ROM) PLAY AUDIO
  1889.  85h    (CD-ROM) STOP AUDIO
  1890.  86h    (CD-ROM) WRITE LONG
  1891.  87h    (CD-ROM) WRITE LONG VERIFY
  1892.  88h    (CD-ROM) RESUME AUDIO
  1893.  
  1894. Format of device driver request header:
  1895. Offset    Size    Description
  1896.  00h    BYTE    length of request header
  1897.  01h    BYTE    subunit within device driver
  1898.  02h    BYTE    command code (see above)
  1899.  03h    WORD    status (filled in by device driver)
  1900.         bit 15: error
  1901.         bits 14-11: reserved
  1902.         bit 10: ??? set by DOS kernel on entry to some driver calls
  1903.         bit 9: busy
  1904.         bit 8: done (may be clear on return under European MS-DOS 4.0)
  1905.         bits 7-0: error code if bit 15 set (see below)
  1906. ---DOS---
  1907.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  1908.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  1909.             device's request queue
  1910.         (other versions) reserved (unused in DOS 2.x and 3.x)
  1911. ---STARLITE architecture---
  1912.  05h    DWORD    pointer to next request header
  1913.  09h  4 BYTEs    reserved
  1914. ---command code 00h---
  1915.  0Dh    BYTE    (return) number of units
  1916.  0Eh    DWORD    (call) pointer to DOS device helper function (see below)
  1917.             (European MS-DOS 4.0 only)
  1918.         (call) pointer past end of memory available to driver (DOS 5+)
  1919.         (return) address of first free byte following driver
  1920.  12h    DWORD    (call) pointer to commandline arguments
  1921.         (return) pointer to BPB array (block drivers) or
  1922.                 0000h:0000h (character drivers)
  1923.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  1924.    ---European MS-DOS 4.0---
  1925.  17h    DWORD    pointer to function to save registers on stack
  1926.    ---DOS 5+ ---
  1927.  17h    WORD    (return) error-message flag
  1928.             0001h MS-DOS should display error msg on init failure
  1929. ---command code 01h---
  1930.  0Dh    BYTE    media descriptor
  1931.  0Eh    BYTE    returned status
  1932.         00h don't know
  1933.         01h media has not changed
  1934.         FFh media has been changed
  1935.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  1936.           bit in device header is set and disk changed
  1937. ---command code 02h---
  1938.  0Dh    BYTE    media descriptor
  1939.  0Eh    DWORD    transfer address
  1940.         -> scratch sector if NON-IBM FORMAT bit in device header set
  1941.         -> first FAT sector otherwise
  1942.  12h    DWORD    pointer to BPB (set by driver) (see INT 21/AH=53h)
  1943. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  1944.  0Dh    BYTE    media descriptor (block devices only)
  1945.  0Eh    DWORD    transfer address
  1946.  12h    WORD    (call) number of bytes to read/write
  1947.         (return) actual number of bytes read or written
  1948. ---command codes 04h,08h,09h---
  1949.  0Dh    BYTE    media descriptor (block devices only)
  1950.  0Eh    DWORD    transfer address
  1951.  12h    WORD    byte count (character devices) or sector count (block devices)
  1952.  14h    WORD    starting sector number (block devices only)
  1953.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  1954.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  1955.         device attribute word bit 1 set only) if starting sector number
  1956.         above is FFFFh (see INT 21/AH=52h)
  1957. ---command code 05h---
  1958.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  1959. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  1960.  no further fields
  1961. ---command code 10h---
  1962.  0Dh    BYTE    unused
  1963.  0Eh    DWORD    transfer address
  1964.  12h    WORD    (call) number of bytes to write
  1965.         (return) actual number of bytes written
  1966. ---command codes 11h,12h---
  1967.  0Dh    BYTE    reserved
  1968. ---command code 15h---
  1969.  no further fields
  1970. ---command codes 13h,19h---
  1971.  0Dh    BYTE    category code
  1972.         00h unknown
  1973.         01h COMn:
  1974.         03h CON
  1975.         05h LPTn:
  1976.         07h mouse (European MS-DOS 4.0)
  1977.         08h disk
  1978.         9Eh (STARLITE) Media Access Control driver
  1979.  0Eh    BYTE    function code
  1980.         00h (STARLITE) MAC Bind request
  1981.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  1982.         SI contents (European MS-DOS 4.0)
  1983.  11h    WORD    offset of device driver header
  1984.         DI contents (European MS-DOS 4.0)
  1985.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  1986. ---command codes 80h,82h---
  1987.  0Dh    BYTE    addressing mode
  1988.         00h HSG (default)
  1989.         01h Phillips/Sony Red Book
  1990.  0Eh    DWORD    transfer address (ignored for command 82h)
  1991.  12h    WORD    number of sectors to read
  1992.         (if 0 for command 82h, request is an advisory seek)
  1993.  14h    DWORD    starting sector number
  1994.         logical sector number in HSG mode
  1995.         frame/second/minute/unused in Red Book mode
  1996.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  1997.  18h    BYTE    data read mode
  1998.         00h cooked (2048 bytes per frame)
  1999.         01h raw (2352 bytes per frame, including EDC/ECC)
  2000.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2001.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  2002. ---command code 83h---
  2003.  0Dh    BYTE    addressing mode (see above)
  2004.  0Eh    DWORD    transfer address (ignored)
  2005.  12h    WORD    number of sectors to read (ignored)
  2006.  14h    DWORD    starting sector number (see also above)
  2007. ---command code 84h---
  2008.  0Dh    BYTE    addressing mode (see above)
  2009.  0Eh    DWORD    starting sector number (see also above)
  2010.  12h    DWORD    number of sectors to play
  2011. ---command codes 85h,88h---
  2012.  no further fields
  2013. ---command codes 86h,87h---
  2014.  0Dh    BYTE    addressing mode (see above)
  2015.  0Eh    DWORD    transfer address (ignored in write mode 0)
  2016.  12h    WORD    number of sectors to write
  2017.  14h    DWORD    starting sector number (see also above)
  2018.  18h    BYTE    write mode
  2019.         00h mode 0 (write all zeros)
  2020.         01h mode 1 (default) (2048 bytes per sector)
  2021.         02h mode 2 form 1 (2048 bytes per sector)
  2022.         03h mode 2 form 2 (2336 bytes per sector)
  2023.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2024.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  2025.  
  2026. Values for error code:
  2027.  00h    write-protect violation
  2028.  01h    unknown unit
  2029.  02h    drive not ready
  2030.  03h    unknown command
  2031.  04h    CRC error
  2032.  05h    bad drive request structure length
  2033.  06h    seek error
  2034.  07h    unknown media
  2035.  08h    sector not found
  2036.  09h    printer out of paper
  2037.  0Ah    write fault
  2038.  0Bh    read fault
  2039.  0Ch    general failure
  2040.  0Dh    reserved
  2041.  0Eh    (CD-ROM) media unavailable
  2042.  0Fh    invalid disk change
  2043.  
  2044. Call European MS-DOS 4.0 device helper function with:
  2045.     DL = function
  2046.         00h "SchedClock" called on each timer tick
  2047.         AL = tick interval in milliseconds
  2048.         01h "DevDone" device I/O complete
  2049.         ES:BX -> request header
  2050.         Note:    must update status word first; may be called from
  2051.               an interrupt handler
  2052.         02h "PullRequest" pull next request from queue
  2053.         DS:SI -> DWORD pointer to start of device's request queue
  2054.         Return: ZF clear if pending request
  2055.                 ES:BX -> request header
  2056.             ZF set if no more requests
  2057.         03h "PullParticular" remove specific request from queue
  2058.         DS:SI -> DWORD pointer to start of device's request queue
  2059.         ES:BX -> request header
  2060.         Return: ZF set if request header not found
  2061.         04h "PushRequest" push the request onto the queue
  2062.         DS:SI -> DWORD pointer to start of device's request queue
  2063.         ES:BX -> request header
  2064.         interrupts disabled
  2065.         05h "ConsInputFilter" keyboard input check
  2066.         AX = character (high byte 00h if PC ASCII character)
  2067.         Return: ZF set if character should be discarded
  2068.             ZF clear if character should be handled normally
  2069.         Note:    called by keyboard interrupt handler so DOS can scan
  2070.               for special input characters
  2071.         06h "SortRequest" push request in sorted order by starting sector
  2072.         DS:SI -> DWORD pointer to start of device's request queue
  2073.         ES:BX -> request header
  2074.         interrupts disabled
  2075.         07h "SigEvent" send signal on keyboard event
  2076.         AH = event identifier
  2077.         Return: AL,FLAGS destroyed
  2078.         09h "ProcBlock" block on event
  2079.         AX:BX = event identifier (typically a pointer)
  2080.         CX = timeout in ms or 0000h for never
  2081.         DH = interruptable flag (nonzero if pause may be interrupted)
  2082.         interrupts disabled
  2083.         Return: after corresponding ProcRun call
  2084.             CF clear if event wakeup, set if unusual wakeup
  2085.             ZF set if timeout wakeup, clear if interrupted
  2086.             AL = wakeup code, nonzero if unusual wakeup
  2087.             interrupts enabled
  2088.             BX,CX,DX destroyed
  2089.         Note:    block process and schedules another to run
  2090.         0Ah "ProcRun" unblock process
  2091.         AX:BX = event identifier (typically a pointer)
  2092.         Return: AX = number of processes awakened
  2093.             ZF set if no processes awakened
  2094.             BX,CX,DX destroyed
  2095.         0Bh "QueueInit" initialize/clear character queue
  2096.         DS:BX -> character queue structure (see below)
  2097.         Note:    the queue size field must be set before calling
  2098.         0Dh "QueueWrite" put a character in the queue
  2099.         DS:BX -> character queue (see below)
  2100.         AL = character to append to end of queue
  2101.         Return: ZF set if queue is full
  2102.             ZF clear if character stored
  2103.         0Eh "QueueRead" get a character from the queue
  2104.         DS:BX -> character queue (see below)
  2105.         Return: ZF set if queue is empty
  2106.             ZF clear if characters in queue
  2107.                 AL = first character in queue
  2108.         10h "GetDOSVar" return pointer to DOS variable
  2109.         AL = index of variable
  2110.             03h current process ID
  2111.         BX = index into variable if AL specifies an array
  2112.         CX = expected length of variable
  2113.         Return: CF clear if successful
  2114.                 DX:AX -> variable
  2115.             CF set on error
  2116.                 AX,DX destroyed
  2117.             BX,CX destroyed
  2118.         Note:    the variables may not be modified
  2119.         14h "Yield" yield CPU if higher-priority task ready to run
  2120.         Return: FLAGS destroyed
  2121.         1Bh "CritEnter" begin system critical section
  2122.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2123.         Return: AX,BX,CX,DX destroyed
  2124.         1Ch "CritLeave" end system critical section
  2125.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2126.         Return: AX,BX,CX,DX destroyed
  2127.         Note:    must be called in the context of the process which
  2128.               called CritEnter on the semaphore
  2129. Note:    the DWORD pointing at the request queue must be allocated by the driver
  2130.       and initialized to 0000h:0000h.  It always points at the next request
  2131.       to be executed
  2132.  
  2133. Format of character queue:
  2134. Offset    Size    Description
  2135.  00h    WORD    size of queue in bytes
  2136.  02h    WORD    index of next character out
  2137.  04h    WORD    count of characters in the queue
  2138.  06h  N BYTEs    queue buffer
  2139. --------D-2F0803-----------------------------
  2140. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  2141.     AX = 0803h
  2142. Return: DS:DI -> first drive data table in list
  2143. Note:    not available under DR-DOS 5.0
  2144. SeeAlso: AX=0801h
  2145.  
  2146. Format of DOS 3.30 drive data table:
  2147. Offset    Size    Description
  2148.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2149.  04h    BYTE    physical unit number (for INT 13)
  2150.  05h    BYTE    logical drive number (0=A:)
  2151.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  2152.         Offset    Size    Description
  2153.          00h    WORD    bytes per sector
  2154.          02h    BYTE    sectors per cluster, FFh if unknown
  2155.          03h    WORD    number of reserved sectors
  2156.          05h    BYTE    number of FATs
  2157.          06h    WORD    number of root dir entries
  2158.          08h    WORD    total sectors
  2159.          0Ah    BYTE    media descriptor, 00h if unknown
  2160.          0Bh    WORD    sectors per FAT
  2161.          0Dh    WORD    sectors per track
  2162.          0Fh    WORD    number of heads
  2163.          11h    WORD    number of hidden sectors
  2164.  19h    BYTE    flags
  2165.         bit 6: 16-bit FAT instead of 12-bit FAT
  2166.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  2167.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  2168.         fixed media)
  2169.  27h    BYTE    terminating null for volume label???
  2170.  28h    BYTE    device type (see INT 21/AX=440Dh)
  2171.  29h    WORD    bit flags describing drive (see below)
  2172.  2Bh    WORD    number of cylinders
  2173.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  2174.  40h  3 BYTEs    ???
  2175.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  2176.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  2177.         media and PC-DOS 3.30)
  2178.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  2179. ---removable media---
  2180.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2181. ---fixed media---
  2182.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  2183.  4Fh    WORD    absolute cylinder number of partition's start on physical
  2184.         drive (always FFFFh if primary partition)
  2185.  
  2186. Format of COMPAQ DOS 3.31 drive data table:
  2187. Offset    Size    Description
  2188.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2189.  04h    BYTE    physical unit number (for INT 13)
  2190.  05h    BYTE    logical drive number (0=A:)
  2191.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  2192.  1Fh  6 BYTEs    reserved fields from BPB above???
  2193.  25h    BYTE    flags
  2194.         bit 6: 16-bit FAT instead of 12-bit FAT
  2195.         bit 5: large volume???
  2196.  26h    WORD    device-open count???
  2197.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  2198.         fixed media)
  2199.  33h    BYTE    terminating null for volume label
  2200.  34h    BYTE    device type (see INT 21/AX=440Dh)
  2201.  35h    WORD    bit flags describing drive (see below)
  2202.  37h    WORD    number of cylinders
  2203.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  2204.  52h  6 BYTEs    ??? apparently always zeros
  2205.  58h    BYTE    least-significant byte of last-accessed cylinder number
  2206. ---removable media---
  2207.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2208. ---fixed media---
  2209.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  2210.  5Bh    WORD    absolute cylinder number of partition's start on physical
  2211.         drive (always FFFFh if primary partition)
  2212.  
  2213. Format of DOS 4.0-6.0 drive data table:
  2214. Offset    Size    Description
  2215.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2216.  04h    BYTE    physical unit number (for INT 13)
  2217.  05h    BYTE    logical drive number (0=A:)
  2218.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  2219.         Offset    Size    Description
  2220.          00h    WORD    bytes per sector
  2221.          02h    BYTE    sectors per cluster, FFh if unknown
  2222.          03h    WORD    number of reserved sectors
  2223.          05h    BYTE    number of FATs
  2224.          06h    WORD    number of root dir entries
  2225.          08h    WORD    total sectors (see offset 15h if zero)
  2226.          0Ah    BYTE    media descriptor, 00h if unknown
  2227.          0Bh    WORD    sectors per FAT
  2228.          0Dh    WORD    sectors per track
  2229.          0Fh    WORD    number of heads
  2230.          11h    DWORD    number of hidden sectors
  2231.          15h    DWORD    total sectors if WORD at 08h is zero
  2232.  1Fh    BYTE    flags
  2233.         bit 6: 16-bit FAT instead of 12-bit
  2234.         bit 7: unsupportable disk (all accesses will return Not Ready)
  2235.  20h    WORD    device-open count
  2236.  22h    BYTE    device type (see INT 21/AX=440Dh)
  2237.  23h    WORD    bit flags describing drive (see below)
  2238.  25h    WORD    number of cylinders
  2239.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  2240.  40h  6 BYTEs    reserved (part of BPB above)
  2241.  46h    BYTE    last track accessed
  2242. ---removable media---
  2243.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2244. ---fixed media---
  2245.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  2246.         always 0001h for DOS 5+
  2247.  49h    WORD    absolute cylinder number of partition's start on physical drive
  2248.         (FFFFh if primary partition in DOS 4.x)
  2249. ------
  2250.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  2251.         extended boot record rather than root directory)
  2252.  56h    BYTE    terminating null for volume label
  2253.  57h    DWORD    serial number
  2254.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  2255.  63h    BYTE    terminating null for filesystem type
  2256.  
  2257. Bitfields for flags describing drive:
  2258.  bit 0    fixed media
  2259.  bit 1    door lock ("changeline") supported
  2260.  bit 2    current BPB locked
  2261.  bit 3    all sectors in a track are the same size
  2262.  bit 4    physical drive has multiple logical units
  2263.  bit 5    current logical drive for physical drive
  2264.  bit 6    disk change detected
  2265.  bit 7    set DASD before formatting
  2266.  bit 8    disk reformatted
  2267.  bit 9    unformatted (fixed media only, disables reads and writes)
  2268. --------f-2F1000-----------------------------
  2269. INT 2F - SHARE - INSTALLATION CHECK
  2270.     AX = 1000h
  2271. Return: AL = 00h  not installed, OK to install
  2272.          01h  not installed, not OK to install
  2273.          FFh  installed
  2274. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  2275.       (08E9: OR  AL,AL
  2276.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  2277.     values of AL other than described here put PC-DOS 4.00 into the same
  2278.       loop (the buggy instructions are the same)
  2279. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  2280.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  2281.       inactive state (due to the undocumented /NC flag used by the autoload
  2282.       code) until this call is made
  2283.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  2284.     Windows Enhanced mode hooks this call and reports that SHARE is
  2285.       installed even when it is not
  2286. SeeAlso: AX=1080h,INT 21/AH=52h
  2287. --------d-2F1001-----------------------------
  2288. INT 2F U - DR-DOS 6.0 SHARE internal - SET ???
  2289.     AX = 1001h
  2290.     DX:BX -> ???function
  2291. Note:    this function is also supported by SuperStor, a disk-compression
  2292.       program by Addstor which is bundled with DR-DOS 6.0
  2293. SeeAlso: AX=1000h,X=F800h
  2294. --------f-2F1040-----------------------------
  2295. INT 2F U - DOS 4 only SHARE internal - ???
  2296.     AX = 1040h
  2297.     ???
  2298. Return: AL = FFh???
  2299. SeeAlso: AX=1000h
  2300. --------f-2F1080-----------------------------
  2301. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  2302.     AX = 1080h
  2303. Return: AL = status
  2304.         F0h successful
  2305.         FFh checking was already on
  2306. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  2307.       and file sharing checks.  The undocumented commandline flag /NC can
  2308.       be used to disable the sharing code.
  2309. SeeAlso: AX=1000h,AX=1081h
  2310. --------f-2F1081-----------------------------
  2311. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  2312.     AX = 1081h
  2313. Return: AL = status
  2314.         F0h successful
  2315.         FFh checking was already off
  2316. Note:    (see AX=1080h)
  2317. SeeAlso: AX=1000h,AX=1080h
  2318. --------O-2F10FF-----------------------------
  2319. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  2320.     AX = 10FFh
  2321.     ES:BX -> ???
  2322. Note:    sets pointer in kernel
  2323. --------N-2F1100-----------------------------
  2324. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  2325.     AX = 1100h
  2326. Return: AL = status
  2327.         00h not installed, OK to install
  2328.         01h not installed, not OK to install
  2329.         FFh installed
  2330.         AH = product identifier (ad hoc by various manufacturers)
  2331.             00h if PC Tools v8 DRIVEMAP
  2332.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  2333.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  2334. Notes:    this function is called by the DOS 3.1+ kernel
  2335.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  2336.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  2337.       redirector
  2338.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  2339.       only supports AL=00h-27h
  2340. --------d-2F1100SFDADA-----------------------
  2341. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  2342.     AX = 1100h subfn DADAh
  2343.     STACK: WORD DADAh
  2344. Return: AL = status
  2345.         00h not installed, OK to install
  2346.         STACK unchanged
  2347.         01h not installed, not OK to install
  2348.         STACK unchanged
  2349.         FFh installed
  2350.         STACK: WORD    ADADh if MSCDEX installed
  2351.                 DADBh if Lotus CD/Networker installed
  2352. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  2353.       than DADAh is considered to mean that MSCDEX is already installed;
  2354.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  2355.       thinking it is already installed when it is in fact CD/Networker
  2356.       that is installed
  2357. Index:    installation check;Lotus CD/Networker
  2358. Index:    Lotus CD/Networker;installation check
  2359. --------N-2F1101-----------------------------
  2360. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  2361.     AX = 1101h
  2362.     SS = DOS DS
  2363.     SDA first filename pointer -> fully-qualified directory name
  2364.     SDA CDS pointer -> current directory structure for drive with dir
  2365. Return: CF set on error
  2366.         AX = DOS error code (see INT 21/AH=59h)
  2367.     CF clear if successful
  2368. Note:    this function is called by the DOS 3.1+ kernel
  2369. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  2370. --------N-2F1102-----------------------------
  2371. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  2372.     AX = 1102h
  2373.     SS = DOS DS
  2374.     SDA first filename pointer -> fully-qualified directory name
  2375.     SDA CDS pointer -> current directory structure for drive with dir
  2376. Return: CF set on error
  2377.         AX = DOS error code (see INT 21/AH=59h)
  2378.     CF clear if successful
  2379. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  2380.       this function "SEQ_RMDIR"
  2381. SeeAlso: AX=1101h
  2382. --------N-2F1103-----------------------------
  2383. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  2384.     AX = 1103h
  2385.     SS = DOS DS
  2386.     SDA first filename pointer -> fully-qualified directory name
  2387.     SDA CDS pointer -> current directory structure for drive with dir
  2388. Return: CF set on error
  2389.         AX = DOS error code (see INT 21/AH=59h)
  2390.     CF clear if successful
  2391. Note:    this function is called by the DOS 3.1+ kernel
  2392. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  2393. --------N-2F1104-----------------------------
  2394. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  2395.     AX = 1104h
  2396.     SS = DOS DS
  2397.     SDA first filename pointer -> fully-qualified directory name
  2398.     SDA CDS pointer -> current directory structure for drive with dir
  2399. Return: CF set on error
  2400.         AX = DOS error code (see INT 21/AH=59h)
  2401.     CF clear if successful
  2402. Note:    appears to be identical to AX=1103h
  2403. SeeAlso: AX=1103h
  2404. --------N-2F1105-----------------------------
  2405. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  2406.     AX = 1105h
  2407.     SS = DOS DS
  2408.     SDA first filename pointer -> fully-qualified directory name
  2409.     SDA CDS pointer -> current directory structure for drive with dir
  2410. Return: CF set on error
  2411.         AX = DOS error code (see INT 21/AH=59h)
  2412.     CF clear if successful
  2413.         CDS updated with new path
  2414. Notes:    this function is called by the DOS 3.1+ kernel
  2415.     directory string in CDS should not have a terminating backslash unless
  2416.       the current directory is the root
  2417. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  2418. --------N-2F1106-----------------------------
  2419. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  2420.     AX = 1106h
  2421.     BX = device info word from SFT
  2422.     ES:DI -> SFT
  2423.         SFT DPB field -> DPB of drive containing file
  2424. Return: CF set on error
  2425.         AX = DOS error code (see INT 21/AH=59h)
  2426.     CF clear if successful
  2427.         SFT updated (redirector must decrement open count, which may be
  2428.             done with INT 2F/AX=1208h)
  2429. Note:    this function is called by the DOS 3.1+ kernel
  2430. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  2431. --------N-2F1107-----------------------------
  2432. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  2433.     AX = 1107h
  2434.     ES:DI -> SFT
  2435.         SFT DPB field -> DPB of drive containing file
  2436. Return: CF set on error
  2437.         AX = DOS error code (see INT 21/AH=59h)
  2438.     CF clear if successful
  2439.         all buffers for file flushed
  2440.         directory entry updated
  2441. Note:    this function is called by the DOS 3.1+ kernel
  2442. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  2443. --------N-2F1108-----------------------------
  2444. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  2445.     AX = 1108h
  2446.     ES:DI -> SFT
  2447.         SFT DPB field -> DPB of drive containing file
  2448.     CX = number of bytes
  2449.     SS = DOS DS
  2450.     SDA DTA field -> user buffer
  2451. Return: CF set on error
  2452.         AX = DOS error code (see INT 21/AH=59h)
  2453.     CF clear if successful
  2454.         CX = number of bytes read (0000h = end of file)
  2455.         SFT updated
  2456. Note:    this function is called by the DOS 3.1+ kernel
  2457. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  2458. --------N-2F1109-----------------------------
  2459. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  2460.     AX = 1109h
  2461.     ES:DI -> SFT
  2462.         SFT DPB field -> DPB of drive containing file
  2463.     CX = number of bytes
  2464.     SS = DOS DS
  2465.     SDA DTA field -> user buffer
  2466. Return: CF set on error
  2467.         AX = DOS error code (see INT 21/AH=59h)
  2468.     CF clear if successful
  2469.         CX = number of bytes written
  2470.         SFT updated
  2471. Notes:    this function is called by the DOS 3.1+ kernel
  2472.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  2473.       the Device Driver Header field points at PCACHE, but does not
  2474.       intercept any other network redirector functions
  2475. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  2476. --------N-2F110A-----------------------------
  2477. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  2478.     AX = 110Ah
  2479.     BX = file handle
  2480.     CX:DX = starting offset
  2481.     SI = high word of size
  2482.     STACK: WORD low word of size
  2483.     ES:DI -> SFT
  2484.         SFT DPB field -> DPB of drive containing file
  2485.     SS = DOS DS
  2486. Return: CF set on error
  2487.        AL = DOS error code (see INT 21/AH=59h)
  2488.     STACK unchanged
  2489. Notes:    this function is called by the DOS 3.10-3.31 kernel
  2490.     the redirector is expected to resolve lock conflicts
  2491. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  2492. --------N-2F110A-----------------------------
  2493. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  2494.     AX = 110Ah
  2495.     BL = function
  2496.         00h lock
  2497.         01h unlock
  2498.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  2499.     DS:DX -> parameter block (see below)
  2500.     ES:DI -> SFT
  2501.         SFT DPB field -> DPB of drive containing file
  2502.     SS = DOS DS
  2503. Return: CF set on error
  2504.        AL = DOS error code (see INT 21/AH=59h)
  2505. Notes:    this function is called by the DOS 4.0+ kernel
  2506.     the redirector is expected to resolve lock conflicts
  2507. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  2508.  
  2509. Format of parameter block entry [array, but currently limited to single entry]:
  2510. Offset    Size    Description
  2511.  00h    DWORD    start offset
  2512.  04h    DWORD    size of region
  2513. --------N-2F110B-----------------------------
  2514. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  2515.     AX = 110Bh
  2516.     BX = file handle
  2517.     CX:DX = starting offset
  2518.     SI = high word of size
  2519.     STACK: WORD low word of size
  2520.     ES:DI -> SFT for file
  2521.         SFT DPB field -> DPB of drive containing file
  2522. Return: CF set on error
  2523.        AL = DOS error code (see INT 21/AH=59h)
  2524.     STACK unchanged
  2525. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  2526. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  2527. --------N-2F110C-----------------------------
  2528. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  2529.     AX = 110Ch
  2530.     ES:DI -> current directory structure for desired drive
  2531. Return: AL = sectors per cluster
  2532.     AH = media ID byte
  2533.     BX = total clusters
  2534.     CX = bytes per sector
  2535.     DX = number of available clusters
  2536. Note:    this function is called by the DOS 3.1+ kernel
  2537. SeeAlso: INT 21/AH=36h
  2538. --------N-2F110D-----------------------------
  2539. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  2540.     AX = 110Dh
  2541.     SDA first filename pointer -> name of file
  2542.     ???
  2543. Return: ???
  2544. Note:    similar to AX=110Eh
  2545. SeeAlso: AX=110Eh
  2546. --------N-2F110E-----------------------------
  2547. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  2548.     AX = 110Eh
  2549.     SS = DOS DS
  2550.     SDA first filename pointer -> fully-qualified name of file
  2551.     SDA CDS pointer -> current directory structure for drive with file
  2552.     STACK: WORD new file attributes
  2553. Return: CF set on error
  2554.         AX = DOS error code (see INT 21/AH=59h)
  2555.     CF clear if successful
  2556.     STACK unchanged
  2557. Note:    this function is called by the DOS 3.1+ kernel
  2558. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  2559. --------N-2F110F-----------------------------
  2560. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  2561.     AX = 110Fh
  2562.     SS = DOS DS
  2563.     SDA first filename pointer -> fully-qualified name of file
  2564.     SDA CDS pointer -> current directory structure for drive with file
  2565. Return: CF set on error
  2566.         AX = DOS error code (see INT 21/AH=59h)
  2567.     CF clear if successful
  2568.         AX = file attributes
  2569.         BX:DI = file size
  2570. Note:    this function is called by the DOS 3.1+ kernel
  2571. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  2572. --------N-2F1110-----------------------------
  2573. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  2574.     AX = 1110h
  2575.     SDA first filename pointer -> name of file
  2576.     ???
  2577. Return: ???
  2578. Note:    appears to be similar to AX=110Fh
  2579. SeeAlso: AX=110Eh
  2580. --------N-2F1111-----------------------------
  2581. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  2582.     AX = 1111h
  2583.     SS = DS = DOS DS
  2584.     SDA first filename pointer = offset of fully-qualified old name
  2585.     SDA second filename pointer = offset of fully-qualified new name
  2586.     SDA CDS pointer -> current directory structure for drive with file
  2587. Return: CF set on error
  2588.         AX = DOS error code (see INT 21/AH=59h)
  2589.     CF clear if successful
  2590. Note:    this function is called by the DOS 3.1+ kernel
  2591. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  2592. --------N-2F1112-----------------------------
  2593. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  2594.     AX = 1112h
  2595.     SS = DS = DOS DS
  2596.     SDA first filename pointer -> name of file
  2597.     ???
  2598. Return: ???
  2599. Note:    similar to AX=1111h
  2600. SeeAlso: AX=1111h
  2601. --------N-2F1113-----------------------------
  2602. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  2603.     AX = 1113h
  2604.     SS = DS = DOS DS
  2605.     SDA first filename pointer -> fully-qualified filename in DOS DS
  2606.     SDA CDS pointer -> current directory structure for drive with file
  2607. Return: CF set on error
  2608.         AX = DOS error code (see INT 21/AH=59h)
  2609.     CF clear if successful
  2610. Notes:    this function is called by the DOS 3.1+ kernel
  2611.     the filespec may contain wildcards
  2612. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  2613. --------N-2F1114-----------------------------
  2614. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  2615.     AX = 1114h
  2616.     SDA first filename pointer -> name of file
  2617.     ???
  2618. Return: ???
  2619. Note:    similar to AX=1113h
  2620. SeeAlso: AX=1113h
  2621. --------N-2F1115-----------------------------
  2622. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  2623.     AX = 1115h
  2624.     SS = DOS DS
  2625.     ES:DI -> SFT ???
  2626.     ???
  2627. Return: ???
  2628. Note:    similar to AX=1116h
  2629. SeeAlso: AX=1116h,AX=112Eh
  2630. --------N-2F1116-----------------------------
  2631. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  2632.     AX = 1116h
  2633.     ES:DI -> uninitialized SFT
  2634.     SS = DOS DS
  2635.     SDA first filename pointer -> fully-qualified name of file to open
  2636.     STACK: WORD file access and sharing modes (see INT 21/AH=3Dh)
  2637. Return: CF set on error
  2638.         AX = DOS error code (see INT 21/AH=59h)
  2639.     CF clear if successful
  2640.         SFT filled (except handle count, which DOS manages itself)
  2641.     STACK unchanged
  2642. Note:    this function is called by the DOS 3.1+ kernel
  2643. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  2644. SeeAlso: INT 21/AH=60h
  2645. --------N-2F1117-----------------------------
  2646. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  2647.     AX = 1117h
  2648.     ES:DI -> uninitialized SFT
  2649.     SS = DOS DS
  2650.     SDA first filename pointer -> fully-qualified name of file to open
  2651.     SDA CDS pointer -> current directory structure for drive with file
  2652.     STACK: WORD file creation mode
  2653.             low byte = file attributes (see INT 21/AH=3Ch)
  2654.             high byte = 00h normal create, 01h create new file
  2655. Return: CF set on error
  2656.         AX = DOS error code (see INT 21/AH=59h)
  2657.     CF clear if successful
  2658.         SFT filled (except handle count, which DOS manages itself)
  2659.     STACK unchanged
  2660. Note:    this function is called by the DOS 3.1+ kernel
  2661. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  2662. --------N-2F1118-----------------------------
  2663. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  2664.     AX = 1118h
  2665.     ES:DI -> uninitialized SFT
  2666.     SS = DOS DS
  2667.     SDA first filename pointer -> fully-qualified name of file
  2668.     STACK: WORD file creation mode
  2669.             low byte = file attributes
  2670.             high byte = 00h normal create, 01h create new file
  2671. Return: ???
  2672.     STACK unchanged
  2673. Note:    this function is called by the DOS 3.1+ kernel when creating a file on a drive for which the
  2674.       SDA CDS pointer has offset FFFFh
  2675. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  2676. --------N-2F1119-----------------------------
  2677. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  2678.     AX = 1119h
  2679.     SS = DS = DOS DS
  2680.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  2681.     SDA first filename pointer -> fully-qualified search template
  2682.     SDA search attribute = attribute mask for search
  2683. Return: CF set on error
  2684.         AX = DOS error code (see INT 21/AH=59h)
  2685.     CF clear if successful
  2686.         [DTA] = updated findfirst search data
  2687.             (bit 7 of first byte must be set)
  2688.         [DTA+15h] = standard directory entry for file
  2689. Notes:    this function is called by the DOS 3.1+ kernel
  2690.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  2691. SeeAlso: AX=111Ah,AX=111Bh
  2692. --------N-2F111A-----------------------------
  2693. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  2694.     AX = 111Ah
  2695.     ???
  2696. Return: CF set
  2697.         AX = error code (03h for DOS 4.01 IFSFUNC)
  2698. Note:    use AX=111Ch for DOS 5+
  2699. SeeAlso: AX=1119h,AX=111Ch
  2700. --------N-2F111B-----------------------------
  2701. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  2702.     AX = 111Bh
  2703.     SS = DS = DOS DS
  2704.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  2705.     SDA first filename pointer -> fully-qualified search template
  2706.     SDA CDS pointer -> current directory structure for drive with file
  2707.     SDA search attribute = attribute mask for search
  2708. Return: CF set on error
  2709.         AX = DOS error code (see INT 21/AH=59h)
  2710.     CF clear if successful
  2711.         [DTA] = updated findfirst search data
  2712.             (bit 7 of first byte must be set)
  2713.         [DTA+15h] = standard directory entry for file
  2714. Note:    this function is called by the DOS 3.1+ kernel
  2715. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  2716. --------N-2F111C-----------------------------
  2717. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  2718.     AX = 111Ch
  2719.     SS = DS = DOS DS
  2720.     ES:DI -> CDS
  2721.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  2722. Return: CF set on error
  2723.         AX = DOS error code (see INT 21/AH=59h)
  2724.     CF clear if successful
  2725.         [DTA] = updated findfirst search data
  2726.             (bit 7 of first byte must be set)
  2727.         [DTA+15h] = standard directory entry for file
  2728. Note:    this function is called by the DOS 3.1+ kernel
  2729. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  2730. --------N-2F111D-----------------------------
  2731. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  2732.     AX = 111Dh
  2733.     SS = DOS DS
  2734.     SDA PSP segment field = PSP of terminating process
  2735. Return: nothing
  2736. Notes:    used when a process is aborted; the process being terminated is
  2737.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  2738.     this function is called by the DOS 3.1+ kernel
  2739.     closes all FCBs opened by process
  2740. SeeAlso: INT 21/AX=5D04h
  2741. --------N-2F111E-----------------------------
  2742. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  2743.     AX = 111Eh
  2744.     SS = DOS DS
  2745.     STACK: WORD function to execute
  2746.         5F00h  get redirection mode
  2747.             BL = type (03h printer, 04h disk)
  2748.             Return: BH = state (00h off, 01h on)
  2749.         5F01h  set redirection mode
  2750.             BL = type (03h printer, 04h disk)
  2751.             BH = state (00h off, 01h on)
  2752.         5F02h  get redirection list entry
  2753.             BX = redirection list index
  2754.             DS:SI -> 16-byte local device name buffer
  2755.             ES:DI -> 128-byte network name buffer
  2756.             Return: must set user's BX to device type and CX to
  2757.                 stored parameter value, using AX=1218h to get
  2758.                 stack frame address
  2759.         5F03h  redirect device
  2760.             BL = device type (see INT 21/AX=5F03h)
  2761.             CX = stored parameter value
  2762.             DS:SI -> ASCIZ source device name
  2763.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  2764.         5F04h  cancel redirection
  2765.             DS:SI -> ASCIZ device name or network path
  2766.         5F05h  get redirection list extended entry
  2767.             BX = redirection list index
  2768.             DS:SI -> buffer for ASCIZ source device name
  2769.             ES:DI -> buffer for destination ASCIZ network path
  2770.             Return: BH = status flag
  2771.                 BL = type (03h printer, 04h disk)
  2772.                 CX = stored parameter value
  2773.                 BP = NETBIOS local session number
  2774.         5F06h  similar to 5F05h???
  2775. Return: CF set on error
  2776.         AX = error code (see INT 21/AH=59h)
  2777.     STACK unchanged
  2778. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  2779.       (including LAN Manager calls)
  2780.     the PC Network 1.00 redirector does not support function 5F06h
  2781. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  2782. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  2783. --------N-2F111F-----------------------------
  2784. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  2785.     AX = 111Fh
  2786.     STACK: WORD function
  2787.         5E02h  set printer setup
  2788.         5E03h  get printer setup
  2789.         5E04h  set printer mode
  2790.         5E05h  get printer mode
  2791. Return: CF set on error
  2792.         AX = error code (see INT 21/AH=59h)
  2793.     STACK unchanged
  2794. Note:    this function is called by the DOS 3.1+ kernel
  2795. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  2796. --------N-2F1120-----------------------------
  2797. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  2798.     AX = 1120h
  2799.     DS = DOS DS
  2800.     ???
  2801. Return: CF clear (successful)
  2802. Notes:    this function is called by the DOS 3.1+ kernel
  2803.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  2804. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  2805. --------N-2F1121-----------------------------
  2806. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  2807.     AX = 1121h
  2808.     CX:DX = offset (in bytes) from end
  2809.     ES:DI -> SFT
  2810.         SFT DPB field -> DPB of drive with file
  2811.     SS = DOS DS
  2812. Return: CF set on error
  2813.         AL = DOS error code (see INT 21/AH=59h)
  2814.     CF clear if successful
  2815.         DX:AX = new file position
  2816. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  2817.       from the end of a file opened with sharing modes set in such a
  2818.       manner that another process is able to change the size of the file
  2819.       while it is already open
  2820. SeeAlso: AX=1228h,INT 21/AH=42h
  2821. --------N-2F1122-----------------------------
  2822. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  2823.     AX = 1122h
  2824.     SS = DOS DS
  2825.     DS = PSP of process about to terminate
  2826. Return: ???
  2827. Note:    this function is called by the DOS 3.1+ kernel
  2828. --------N-2F1123-----------------------------
  2829. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  2830.     AX = 1123h
  2831.     DS:SI -> ASCIZ filename to canonicalize
  2832.     ES:DI -> 128-byte buffer for qualified name
  2833. Return: CF set if not resolved
  2834. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  2835.       filename matches the name of a character device
  2836.     called first when DOS attempts to resolve a filename (unless inside an
  2837.       AX=5D00h server call); if this fails, DOS resolves the name locally
  2838. SeeAlso: AX=1221h,INT 21/AH=60h
  2839. --------N-2F1124-----------------------------
  2840. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  2841.     AX = 1124h
  2842.     ES:DI -> SFT
  2843.     SS = DOS DS
  2844.     ???
  2845. Return: CX = ???
  2846. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h returns CF set
  2847. SeeAlso: AX=1126h
  2848. --------N-2F1125-----------------------------
  2849. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  2850.     AX = 1125h
  2851.     STACK: WORD subfunction
  2852.         5D07h get print stream state
  2853.             Return: DL = current state
  2854.         5D08h set print stream state
  2855.             DL = new state
  2856.         5D09h finish print job
  2857. Return: CF set on error
  2858.         AX = error code (see INT 21/AH=59h)
  2859.     STACK unchanged
  2860. Note:    this function is called by the DOS 3.1+ kernel
  2861. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  2862. --------N-2F1126-----------------------------
  2863. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  2864.     AX = 1126h
  2865.     ES:DI -> SFT for file handle 4???
  2866.     SS = DOS DS???
  2867.     ???
  2868. Return: CF set on error
  2869. Notes:    this function is called by the DOS 3.1+ kernel
  2870.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  2871.       bit 11 of the device information word in the SFT set
  2872. SeeAlso: AX=1124h
  2873. --------N-2F1127-----------------------------
  2874. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2875.     AX = 1127h
  2876. Return: CF set
  2877.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2878. --------N-2F1128-----------------------------
  2879. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2880.     AX = 1128h
  2881. Return: CF set
  2882.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2883. --------N-2F1129-----------------------------
  2884. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2885.     AX = 1129h
  2886. Return: CF set
  2887.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2888. --------N-2F112A-----------------------------
  2889. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  2890.     AX = 112Ah
  2891.     DS = DOS DS
  2892.     ???
  2893. Return: ???
  2894. Note:    does something to each IFS driver
  2895. --------N-2F112B-----------------------------
  2896. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  2897.     AX = 112Bh
  2898.     SS = DOS DS
  2899.     CX = function/category
  2900.     DS:DX -> parameter block
  2901.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  2902.     ???
  2903. Return: CF set on error
  2904.         AX = DOS error code (see INT 21/AH=59h)
  2905.     CF clear if successful
  2906. Note:    this function is called by the DOS 4.0 kernel
  2907. --------N-2F112C-----------------------------
  2908. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - "UPDATE_CB" - ???
  2909.     AX = 112Ch
  2910.     SS = DOS DS
  2911.     SDA current SFT pointer -> SFT for file
  2912.     ???
  2913. Return: CF set on error
  2914. Note:    called by SHARE in DOS 5.0-6.0
  2915. --------N-2F112D-----------------------------
  2916. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  2917.     AX = 112Dh
  2918.     BL = subfunction (value of AL on INT 21)
  2919.         02h get extended attributes
  2920.         03h get extended attribute properties
  2921.         04h set extended attributes
  2922.         Return: CF clear
  2923.         else ???
  2924.         Return: CX = ??? (00h or 02h for DOS 4.01)
  2925.     ES:DI -> SFT for file
  2926.     SS = DOS DS
  2927. Return: DS = DOS DS
  2928. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  2929.       INT 21/AX=5703h, and INT 21/AX=5704h
  2930. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  2931. --------N-2F112E-----------------------------
  2932. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  2933.     AX = 112Eh
  2934.     SS = DS = DOS DS
  2935.     ES:DI -> uninitialized SFT for file
  2936.     STACK: WORD file attribute for created/truncated file
  2937.             low byte = file attributes
  2938.             high byte = 00h normal create/open, 01h create new file
  2939.     SDA first filename pointer -> fully-qualified filename
  2940.     SDA extended file open action = action code (see INT 21/AX=6C00h)
  2941.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  2942. Return: CF set on error
  2943.         AX = error code
  2944.     CF clear if successful
  2945.         CX = result code
  2946.         01h file opened
  2947.         02h file created
  2948.         03h file replaced (truncated)
  2949.         SFT initialized (except handle count, which DOS manages itself)
  2950. Note:    this function is called by the DOS 4+ kernel
  2951. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  2952. --------N-2F112F-----------------------------
  2953. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  2954.     AX = 112Fh
  2955.     SS = DOS DS
  2956.     STACK: WORD function in low byte
  2957.         00h ???
  2958.             DS:SI -> Current Directory Structure???
  2959.             CL = drive (1=A:)
  2960.         01h ???
  2961.             DS:SI -> ???
  2962.             CL = file handle???
  2963.         02h ???
  2964.             DS:SI -> Current Directory Structure???
  2965.             DI = ???
  2966.             CX = drive (1=A:)
  2967.     ???
  2968. Return: CF set on error
  2969.         AX = DOS error code (see INT 21/AH=59h)
  2970.     CF clear if successful
  2971. Note:    this function is called by the DOS 4.0 kernel
  2972. SeeAlso: INT 21/AH=6Bh
  2973. --------N-2F1130-----------------------------
  2974. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  2975.     AX = 1130h
  2976. Return: ES = CS of resident IFSFUNC
  2977. --------N-2F1180-----------------------------
  2978. INT 2F - LAN Manager Enhanced DOS Services - ???
  2979.     AX = 1180h
  2980.     ???
  2981. Return: ???
  2982. --------N-2F1182-----------------------------
  2983. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  2984.     AX = 1182h
  2985.     ???
  2986. Return: ???
  2987. --------N-2F1184-----------------------------
  2988. INT 2F - LAN Manager Enhanced DOS - ???
  2989.     AX = 1184h
  2990.     ???
  2991. Return: ???
  2992. --------N-2F1186-----------------------------
  2993. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  2994.     AX = 1186h
  2995.     DS:SI -> stack frame (see below)
  2996. Return: CF clear if successful
  2997.     CF set if error
  2998.         AX = error code
  2999. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  3000.       file/printer services
  3001. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  3002.  
  3003. Format of DosReadAsynchNmPipe stack frame:
  3004. Offset    Size    Description
  3005.  00h    DWORD    -> number of bytes read
  3006.  04h    WORD    size of buffer
  3007.  06h    DWORD    -> buffer
  3008.  0Ah    DWORD    -> return code
  3009.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  3010.  12h    WORD    handle
  3011. --------N-2F118A-----------------------------
  3012. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  3013.     AX = 118Ah
  3014.     BX = function (0000h or 0001h)
  3015. Return: CF clear if successful
  3016.         AX = 1100h success
  3017.     CF set if error
  3018.         AX = 0001h, etc.
  3019. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  3020. --------N-2F118B-----------------------------
  3021. INT 2F - LAN Manager Enhanced DOS - ???
  3022.     AX = 118Bh
  3023.     ???
  3024. Return: ???
  3025. --------N-2F118C-----------------------------
  3026. INT 2F - LAN Manager Enhanced DOS - ???
  3027.     AX = 118Ch
  3028.     ???
  3029. Return: ???
  3030. --------N-2F118E-----------------------------
  3031. INT 2F - LAN Manager Enhanced DOS - ???
  3032.     AX = 118Eh
  3033.     ???
  3034. Return: ???
  3035. --------N-2F118F-----------------------------
  3036. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  3037.     AX = 118Fh
  3038.     DS:SI -> stack frame (see below)
  3039. Return: CF clear if successful
  3040.     CF set if error
  3041.         AX = error code
  3042. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  3043.  
  3044. Format of DosReadAsynchNmPipe stack frame:
  3045. Offset    Size    Description
  3046.  00h    DWORD    -> number of bytes read
  3047.  04h    WORD    Size of buffer
  3048.  06h    DWORD    -> buffer
  3049.  0Ah    DWORD    -> return code
  3050.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  3051.  12h    WORD    handle
  3052. --------N-2F1190-----------------------------
  3053. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  3054.     AX = 1190h
  3055.     DS:SI -> stack frame
  3056. Return: CF clear if successful
  3057.     CF set if error
  3058.         AX = error code
  3059. SeeAlso: AX=1186h,AX=1191h
  3060.  
  3061. Format of DosReadAsynchNmPipe2 stack frame:
  3062. Offset    Size    Description
  3063.  00h    DWORD    -> number of bytes read
  3064.  04h    WORD    size of buffer
  3065.  06h    DWORD    -> buffer
  3066.  0Ah    DWORD    -> return code
  3067.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  3068.  12h    WORD    handle
  3069.  14h    DWORD    ???
  3070. --------N-2F1191-----------------------------
  3071. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  3072.     AX = 1191h
  3073.     DS:SI -> stack frame (see below)
  3074. Return: CF clear if successful
  3075.     CF set if error
  3076.         AX = error code
  3077. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  3078.  
  3079. Format of DosReadAsynchNmPipe2 stack frame:
  3080. Offset    Size    Description
  3081.  00h    DWORD    -> number of bytes read
  3082.  04h    WORD    size of buffer
  3083.  06h    DWORD    -> buffer
  3084.  0Ah    DWORD    -> return code
  3085.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  3086.  12h    WORD    handle
  3087.  14h    DWORD    ???
  3088. --------D-2F1200-----------------------------
  3089. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  3090.     AX = 1200h
  3091. Return: AL = FFh (for compatibility with other INT 2F functions)
  3092. --------D-2F1201-----------------------------
  3093. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  3094.     AX = 1201h
  3095.     SS = DOS DS (must be using a DOS internal stack)
  3096.     SDA current SFT pointer -> SFT of file to close
  3097. Return: CF set on error
  3098.     BX???
  3099.     CX new reference count of SFT
  3100.     ES:DI -> SFT for file
  3101. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  3102. --------D-2F1202-----------------------------
  3103. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  3104.     AX = 1202h
  3105.     STACK: WORD vector number
  3106. Return: ES:BX -> interrupt vector
  3107.     STACK unchanged
  3108. --------D-2F1203-----------------------------
  3109. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  3110.     AX = 1203h
  3111. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  3112. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  3113.       segment
  3114. --------D-2F1204-----------------------------
  3115. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  3116.     AX = 1204h
  3117.     STACK: WORD character to normalize
  3118. Return: AL = normalized character (forward slash turned to backslash, all
  3119.         others unchanged)
  3120.     ZF set if path separator
  3121.     STACK unchanged
  3122. --------D-2F1205-----------------------------
  3123. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  3124.     AX = 1205h
  3125.     STACK: WORD character to output
  3126. Return: STACK unchanged
  3127. Note:    can be called only from within DOS
  3128. --------D-2F1206-----------------------------
  3129. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  3130.     AX = 1206h
  3131.     DI = error code
  3132.     BP:SI -> device driver header
  3133.     SS = DOS DS (must be using a DOS internal stack)
  3134.     STACK: WORD value to be passed to INT 24 in AX
  3135. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  3136.     STACK unchanged
  3137. SeeAlso: INT 24
  3138. --------D-2F1207-----------------------------
  3139. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  3140.     AX = 1207h
  3141.     DS:DI -> disk buffer
  3142. Return: nothing
  3143. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  3144.       recently used is first); under DOS 3.3, the buffer is then moved to
  3145.       the start of the disk buffer chain if it was marked unused
  3146. Notes:    can be called only from within DOS
  3147.     this function is nearly the same as AX=120Fh
  3148. SeeAlso: AX=120Fh
  3149. --------D-2F1208-----------------------------
  3150. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  3151.     AX = 1208h
  3152.     ES:DI -> SFT
  3153. Return: AX = original value of reference count
  3154. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  3155.       that the SFT is not in use).    It is the caller's responsibility to
  3156.       set the reference count to zero after cleaning up.
  3157.     used by network redirectors such as MSCDEX
  3158. SeeAlso: AX=1106h
  3159. --------D-2F1209-----------------------------
  3160. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  3161.     AX = 1209h
  3162.     DS:DI -> disk buffer
  3163. Return: disk buffer marked unused, contents written to disk if buffer dirty
  3164. Note:    can be called only from within DOS
  3165. SeeAlso: AX=120Eh,AX=1215h
  3166. --------D-2F120A-----------------------------
  3167. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  3168.     AX = 120Ah
  3169.     DS = SS = DOS DS (must be using a DOS internal stack)
  3170.     STACK: WORD extended error code
  3171. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  3172.     CF clear if retry, set otherwise
  3173.     STACK unchanged
  3174. Notes:    can only be called during a DOS function call, as it uses various
  3175.       fields in the SDA to set up the registers for the INT 24
  3176.     reportedly sets current DPB's first root directory sector to 1
  3177. SeeAlso: INT 24
  3178. --------D-2F120B-----------------------------
  3179. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  3180.     AX = 120Bh
  3181.     ES:DI -> system file table entry for previous open of file
  3182.     STACK: WORD extended error code (should be 20h--sharing violation)
  3183. Return: CF clear if operation should be retried
  3184.     CF set if operation should not be retried
  3185.         AX = error code (20h) (see INT 21/AH=59h)
  3186.     STACK unchanged
  3187. Notes:    can only be called during a DOS function call
  3188.     should only be called if an attempt was made to open an already-open
  3189.       file contrary to the sharing rules
  3190.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  3191.       inheritance allowed
  3192. --------D-2F120C-----------------------------
  3193. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  3194.     AX = 120Ch
  3195.     SDA current SFT pointer -> SFT for file
  3196.     DS = DOS DS
  3197.     SS = DOS DS (must be using a DOS internal stack)
  3198. Return: ES, DI, AX destroyed
  3199. Notes:    invokes "device open" call on device driver for SFT
  3200.     changes owner of last-accessed SFT to calling process if it was opened
  3201.       via FCB
  3202.     called by network redirectors such as MSCDEX
  3203. --------D-2F120D-----------------------------
  3204. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  3205.     AX = 120Dh
  3206.     SS = DOS DS (must be using a DOS internal stack)
  3207. Return: AX = current date in packed format (see INT 21/AX=5700h)
  3208.     DX = current time in packed format (see INT 21/AX=5700h)
  3209. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  3210. --------D-2F120E-----------------------------
  3211. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  3212.     AX = 120Eh
  3213.     SS = DOS DS (must be using a DOS internal stack)
  3214. Return: DS:DI -> first disk buffer
  3215. Notes:    clears "referenced" flag on all disk buffers
  3216.     in DOS 5+, this has become essentially a NOP, invoking the same code
  3217.       used by AX=1224h (SHARING DELAY)
  3218. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  3219. --------D-2F120F-----------------------------
  3220. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  3221.     AX = 120Fh
  3222.     DS:DI -> disk buffer
  3223.     SS = DOS DS (must be using a DOS internal stack)
  3224. Return: DS:DI -> next buffer in buffer list
  3225. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  3226.       recently used is first); under DOS 3.3, the buffer is then moved to
  3227.       the start of the disk buffer chain if it was marked unused
  3228. Note:    this function is the same as AX=1207h except that it returns a
  3229.       pointer to the buffer following the specified buffer in the buffer
  3230.       chain
  3231. SeeAlso: AX=1207h
  3232. --------D-2F1210-----------------------------
  3233. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  3234.     AX = 1210h
  3235.     DS:DI -> first disk buffer to check
  3236. Return: ZF clear if found
  3237.         DS:DI -> first unreferenced disk buffer
  3238.     ZF set if not found
  3239. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  3240.       used by AX=1224h (SHARING DELAY)
  3241. SeeAlso: AX=120Eh
  3242. --------D-2F1211-----------------------------
  3243. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  3244.     AX = 1211h
  3245.     DS:SI -> ASCIZ filename to normalize
  3246.     ES:DI -> buffer for normalized filename
  3247. Return: destination buffer filled with uppercase filename, with slashes turned
  3248.     to backslashes
  3249. SeeAlso: AX=121Eh,AX=1221h
  3250. --------D-2F1212-----------------------------
  3251. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  3252.     AX = 1212h
  3253.     ES:DI -> ASCIZ string
  3254. Return: CX = length of string
  3255. SeeAlso: AX=1225h
  3256. --------D-2F1213-----------------------------
  3257. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  3258.     AX = 1213h
  3259.     STACK: WORD character to convert to uppercase
  3260. Return: AL = uppercase character
  3261.     STACK unchanged
  3262. --------D-2F1214-----------------------------
  3263. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  3264.     AX = 1214h
  3265.     DS:SI = first pointer
  3266.     ES:DI = second pointer
  3267. Return: ZF set if pointers are equal, ZF clear if not equal
  3268. --------D-2F1215-----------------------------
  3269. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  3270.     AX = 1215h
  3271.     DS:DI -> disk buffer
  3272.     SS = DOS DS (must be using a DOS internal stack)
  3273.     STACK: WORD drives for which to skip buffer
  3274.         ignore buffer if drive same as high byte, or bytes differ and
  3275.         the buffer is for a drive OTHER than that given in low byte
  3276. Return: STACK unchanged
  3277. Note:    can be called only from within DOS
  3278. SeeAlso: AX=1209h
  3279. --------D-2F1216-----------------------------
  3280. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  3281.     AX = 1216h
  3282.     BX = system file table entry number
  3283. Return: CF clear if successful
  3284.         ES:DI -> system file table entry
  3285.     CF set if BX greater than FILES=
  3286. Note:    supported by DR-DOS 5+
  3287. SeeAlso: AX=1220h
  3288. --------D-2F1217-----------------------------
  3289. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  3290.     AX = 1217h
  3291.     SS = DOS DS (must be using a DOS internal stack)
  3292.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  3293. Return: CF set on error
  3294.         (drive > LASTDRIVE)
  3295.     CF clear if successful
  3296.         DS:SI -> current directory structure for specified drive
  3297.     STACK unchanged
  3298. SeeAlso: AX=1219h
  3299. --------D-2F1218-----------------------------
  3300. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  3301.     AX = 1218h
  3302. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  3303. Note:    only valid while within DOS
  3304. --------D-2F1219-----------------------------
  3305. INT 2F U - DOS 3+ internal - SET DRIVE???
  3306.     AX = 1219h
  3307.     SS = DOS DS (must be using a DOS internal stack)
  3308.     STACK: WORD drive (0 = default, 1 = A:, etc)
  3309. Return: ???
  3310.     STACK unchanged
  3311. Notes:    calls AX=1217h
  3312.     builds a current directory structure if inside server call
  3313.       (INT 21/AX=5D00h)
  3314. SeeAlso: AX=1217h,AX=121Fh
  3315. --------D-2F121A-----------------------------
  3316. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  3317.     AX = 121Ah
  3318.     DS:SI -> filename
  3319. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  3320.     DS:SI -> filename without leading X: (if present)
  3321. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  3322. --------D-2F121B-----------------------------
  3323. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  3324.     AX = 121Bh
  3325.     CL = year - 1980
  3326. Return: AL = number of days in February
  3327. Note:    requires DS to be set to the DOS data segment
  3328. SeeAlso: INT 21/AH=2Bh
  3329. --------D-2F121C-----------------------------
  3330. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  3331.     AX = 121Ch
  3332.     DS:SI -> start of memory to checksum
  3333.     CX = number of bytes
  3334.     DX = initial checksum
  3335.     SS = DOS DS (must be using a DOS internal stack)
  3336. Return: AX, CX destroyed
  3337.     DX = checksum
  3338.     DS:SI -> first byte after checksummed range
  3339. Notes:    used by DOS to determine day count since 1/1/80 given a date
  3340.     supported by DR-DOS 5.0+
  3341. SeeAlso: AX=121Dh
  3342. --------D-2F121D-----------------------------
  3343. INT 2F U - DOS 3+ internal - SUM MEMORY
  3344.     AX = 121Dh
  3345.     DS:SI -> memory to add up
  3346.     CX = 0000h
  3347.     DX = limit
  3348. Return: AL = byte which exceeded limit
  3349.     CX = number of bytes before limit exceeded
  3350.     DX = remainder after adding first CX bytes
  3351.     DS:SI -> byte beyond the one which exceeded the limit
  3352. Notes:    used by DOS to determine year or month given day count since 1/1/80
  3353.     supported by DR-DOS 5.0+
  3354. SeeAlso: AX=121Ch
  3355. --------D-2F121E-----------------------------
  3356. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  3357.     AX = 121Eh
  3358.     DS:SI -> first ASCIZ filename
  3359.     ES:DI -> second ASCIZ filename
  3360. Return: ZF set if filenames equivalent, ZF clear if not
  3361. Note:    supported by DR-DOS 5.0+
  3362. SeeAlso: AX=1211h,AX=1221h
  3363. --------D-2F121F-----------------------------
  3364. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  3365.     AX = 121Fh
  3366.     SS = DOS DS (must be using a DOS internal stack)
  3367.     STACK: WORD drive letter
  3368. Return: ES:DI -> current directory structure (will be overwritten by next call)
  3369.     STACK unchanged
  3370. --------D-2F1220-----------------------------
  3371. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  3372.     AX = 1220h
  3373.     BX = file handle
  3374. Return: CF set on error
  3375.         AL = 6 (invalid file handle)
  3376.     CF clear if successful
  3377.         ES:DI -> JFT entry for file handle in current process
  3378. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  3379.       file handle, or FFh if the handle is not open
  3380.     supported by DR-DOS 5.0+
  3381. SeeAlso: AX=1216h,AX=1229h
  3382. --------D-2F1221-----------------------------
  3383. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  3384.     AX = 1221h
  3385.     DS:SI -> file name to be fully qualified
  3386.     ES:DI -> 128-byte buffer for resulting canonical file name
  3387.     SS = DOS DS (must be using a DOS internal stack)
  3388. Return: (see INT 21/AH=60h)
  3389. Note:    identical to INT 21/AH=60h
  3390. SeeAlso: AX=1123h,INT 21/AH=60h
  3391. --------D-2F1222-----------------------------
  3392. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  3393.     AX = 1222h
  3394.     SS = DOS data segment
  3395.     SS:SI -> 4-byte records
  3396.         BYTE    error code, FFh = last record
  3397.         BYTE    error class, FFh = don't change
  3398.         BYTE    suggested action, FFh = don't change
  3399.         BYTE    error locus, FFh = don't change
  3400.     SDA error code set
  3401. Return: SI destroyed
  3402.     SDA error class, error locus, and suggested action fields set
  3403. Note:    can be called only from within DOS
  3404. SeeAlso: AX=122Dh,INT 21/AH=59h,INT 21/AX=5D0Ah
  3405. --------D-2F1223-----------------------------
  3406. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  3407.     AX = 1223h
  3408.     DS = DOS DS
  3409.     SS = DOS DS (must be using a DOS internal stack)
  3410.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  3411.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  3412. Return: CF set if no character device by that name found
  3413.     CF clear if found
  3414.         BH = low byte of device attribute word
  3415. Note:    can only be called from within DOS
  3416. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  3417. --------D-2F1224-----------------------------
  3418. INT 2F U - DOS 3+ internal - SHARING RETRY DELAY
  3419.     AX = 1224h
  3420.     SS = DOS DS (must be using a DOS internal stack)
  3421. Return: after delay set by INT 21/AX=440Bh, unless in server call
  3422.       (INT 21/AX=5D00h)
  3423. Note:    delay is dependent on the processor speed, and is skipped entirely if
  3424.       inside a server call
  3425. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  3426. --------D-2F1225-----------------------------
  3427. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  3428.     AX = 1225h
  3429.     DS:SI -> ASCIZ string
  3430. Return: CX = length of string
  3431. Note:    supported by DR-DOS 5.0+
  3432. SeeAlso: AX=1212h
  3433. --------D-2F1226-----------------------------
  3434. INT 2F U - DOS 3.3+ internal - OPEN FILE
  3435.     AX = 1226h
  3436.     CL = access mode
  3437.     DS:DX -> ASCIZ filename
  3438.     SS = DOS DS (must be using a DOS internal stack)
  3439. Return: CF set on error
  3440.         AL = error code (see INT 21/AH=59h)
  3441.     CF clear if successful
  3442.         AX = file handle
  3443. Notes:    can only be called from within DOS
  3444.     equivalent to INT 21/AH=3Dh
  3445.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3446. SeeAlso: AX=1227h,INT 21/AH=3Dh
  3447. --------D-2F1227-----------------------------
  3448. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  3449.     AX = 1227h
  3450.     BX = file handle
  3451.     SS = DOS DS (must be using a DOS internal stack)
  3452. Return: CF set on error
  3453.         AL = 06h invalid file handle
  3454.     CF clear if successful
  3455. Notes:    can only be called from within DOS
  3456.     equivalent to INT 21/AH=3Eh
  3457.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3458. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  3459. --------D-2F1228BP4200-----------------------
  3460. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  3461.     AX = 1228h
  3462.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  3463.     BX = file handle
  3464.     CX:DX = offset in bytes
  3465.     SS = DOS DS (must be using a DOS internal stack)
  3466. Return: as for INT 21/AH=42h
  3467. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  3468.       function call
  3469.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  3470.       LSEEK, and restores frame pointer
  3471.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3472. SeeAlso: INT 21/AH=42h
  3473. --------D-2F1229-----------------------------
  3474. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  3475.     AX = 1229h
  3476.     BX = file handle
  3477.     CX = number of bytes to read
  3478.     DS:DX -> buffer
  3479.     SS = DOS DS (must be using a DOS internal stack)
  3480. Return: as for INT 21/AH=3Fh
  3481. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  3482.       a DOS function call
  3483.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3484. SeeAlso: AX=1226h,INT 21/AH=3Fh
  3485. --------D-2F122A-----------------------------
  3486. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  3487.     AX = 122Ah
  3488.     BX = entry point to set (0001h or 0002h)
  3489.     DS:SI -> FASTOPEN entry point
  3490.         (entry point not set if SI = FFFFh for DOS 4+)
  3491. Return: CF set if specified entry point already set
  3492. Notes:    entry point in BX is ignored under DOS 3.30
  3493.     both entry points set to same handler by DOS 4.01
  3494.     DOS 5.0 and 6.0 only set entry point 1
  3495.  
  3496. DOS 3.30+ FASTOPEN is called with:
  3497.     AL = 01h  Lookup
  3498.         CX = ??? seems to be offset
  3499.         DI = ??? seems to be offset
  3500.         SI = offset in DOS DS of filename
  3501.     AL = 02h  insert file into FASTOPEN cache
  3502.     AL = 03h  delete file from FASTOPEN cache
  3503.         SI = offset in DOS DS of filename
  3504.     AL = 04h  purge FASTOPEN cache
  3505.         AH = subfunction (00h,01h,02h)
  3506.         ES:DI -> ???
  3507.         CX = ??? (subfunctions 01h and 02h only)
  3508. Returns: CF set on error or not installed
  3509. Note: function 03h calls function 01h first
  3510.  
  3511. PC-DOS 4.01 FASTOPEN is additionally called with:
  3512.     AL = 04h ???
  3513.         AH = 03h
  3514.         ???
  3515.     AL = 05h ???
  3516.     AL = 0Bh ???
  3517.     AL = 0Ch ???
  3518.     AL = 0Dh ???
  3519.     AL = 0Eh ???
  3520.     AL = 0Fh ???
  3521.     AL = 10h ???
  3522.  
  3523. MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  3524.     AL = 04h  purge FASTOPEN cache
  3525.         AH = 03h
  3526.         ???
  3527.     AL = 05h ???
  3528.         DL = drive (00h = A:)
  3529.         ???
  3530.     AL = 06h ???
  3531.         ???
  3532. --------D-2F122B-----------------------------
  3533. INT 2F U - DOS 3.3+ internal - IOCTL
  3534.     AX = 122Bh
  3535.     BP = 44xxh
  3536.     SS = DOS DS (must be using a DOS internal stack)
  3537.     additional registers as appropriate for INT 21/AX=44xxh
  3538. Return: as for INT 21/AH=44h
  3539. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  3540.       a DOS function call
  3541.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  3542.       IOCTL, and restores frame pointer
  3543.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  3544. SeeAlso: INT 21/AH=44h
  3545. --------D-2F122C-----------------------------
  3546. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  3547.     AX = 122Ch
  3548. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  3549. Note:    although this function exists in DR-DOS 5.0, it returns 0000h:0000h
  3550. SeeAlso: INT 21/AH=52h
  3551. --------D-2F122D-----------------------------
  3552. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  3553.     AX = 122Dh
  3554. Return: AX = current extended error code
  3555. SeeAlso: AX=1222h,INT 21/AH=59h
  3556. --------D-2F122E-----------------------------
  3557. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  3558.     AX = 122Eh
  3559.     DL = subfunction
  3560.         00h get standard DOS error table
  3561.         Return: ES:DI -> error table
  3562.                  (DOS 4: errors 00h-12h,50h-5Bh)
  3563.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  3564.         01h set standard DOS error table
  3565.         ES:DI -> error table
  3566.         02h get parameter error table (errors 00h-0Ah)
  3567.         Return: ES:DI -> error table
  3568.         03h set parameter error table
  3569.         ES:DI -> error table
  3570.         04h get critical/SHARE error table (errors 13h-2Bh)
  3571.         Return: ES:DI -> error table
  3572.         05h set critical/SHARE error table
  3573.         ES:DI -> error table
  3574.         06h get ??? error table
  3575.         Return: ES:DI -> error table or 0000h:0000h
  3576.         07h set ??? error table
  3577.         ES:DI -> error table
  3578.         08h get error message retriever (see below)
  3579.         Return: ES:DI -> FAR procedure to fetch error message
  3580.         09h set ??? error table
  3581.         ES:DI -> error table
  3582. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  3583.       the offset of the error message table within COMMAND.COM, and the
  3584.       procedure returned by DL=08h should be called
  3585.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  3586.       with DL odd are ignored); they are always returned with segment 0001h
  3587.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  3588.       into a single error table
  3589. SeeAlso: AX=0500h,INT 21/AH=59h
  3590.  
  3591. Format of DOS 4.x error table:
  3592. Offset    Size    Description
  3593.  00h    BYTE    FFh
  3594.  01h  2 BYTEs    04h,00h (DOS version???)
  3595.  03h    BYTE    number of error headers following
  3596.  04h 2N WORDs    table of all error headers for table
  3597.         Offset    Size    Description
  3598.          00h    WORD    error message number
  3599.          02h    WORD    offset of error message from start of header
  3600.                 error messages are count byte followed by msg
  3601. Note:    DOS 5 error tables consist of one word per error number; each word
  3602.       contains either the offset of a counted string or 0000h
  3603.  
  3604. Call error retrieval function with:
  3605.     AX = error number
  3606.     DI = offset of error table
  3607. Return: ES:DI -> error message (counted string)
  3608. Notes:    this function needs to access COMMAND.COM if the messages were not
  3609.       loaded into memory permanently with /MSG; the caller should assume
  3610.       that the returned message will be overwritten by the next call of
  3611.       the function
  3612.     supported by DR-DOS 5.0
  3613.  
  3614. Values for parameter errors:
  3615.  01h    Too many parameters
  3616.  02h    Required Parameter missing
  3617.  03h    Invalid switch
  3618.  04h    Invalid keyword
  3619.  06h    Parameter value not in allowed range
  3620.  07h    Parameter value not allowed
  3621.  08h    Parameter value not allowed
  3622.  09h    Parameter format not correct
  3623.  0Ah    Invalid parameter
  3624.  0Bh    Invalid parameter combination
  3625. --------D-2F122F-----------------------------
  3626. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  3627.     AX = 122Fh
  3628.     DX = DOS version number (0000h = return true DOS version)
  3629. Note:    not available under DR-DOS 5.0 or 6.0
  3630. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  3631. --------O-2F12FFBX0006-----------------------
  3632. INT 2F U - DR-DOS 6 - VIDEO MEMORY SPACE CONTROL
  3633.     AX = 12FFh
  3634.     BX = 0006h
  3635.     DX = 0000h
  3636.     CX = function
  3637.         0000h get status of video memory space (MEMMAX /V)
  3638.         0001h map memory into video memory space (MEMMAX +V)
  3639.         0002h unmap memory from video memory space (MEMMAX -V)
  3640. Return: CF clear if successful
  3641.         AX = 0000h (successful)
  3642.         BX = segment of reserved video RAM
  3643.         CX = segment of used video RAM
  3644.         DX = segment of first upper MCB
  3645. Note:    this functionality is provided by EMM386, and partially supported by
  3646.       HIDOS.SYS
  3647. SeeAlso: AX=D201h/BX=4849h
  3648. --------D-2F13-------------------------------
  3649. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  3650.     AH = 13h
  3651.     DS:DX -> interrupt handler disk driver calls on read/write
  3652.     ES:BX = address to restore INT 13 to on system halt (exit from root
  3653.          shell) or warm boot (INT 19)
  3654. Return: DS:DX set by previous invocation of this function
  3655.     ES:BX set by previous invocation of this function
  3656. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  3657.       original INT 13 handler.  The first is for disk change detection
  3658.       on floppy drives, the second is for tracking formatting calls and
  3659.       correcting DMA boundary errors, the third is for working around
  3660.       problems in a particular version of IBM's ROM BIOS
  3661.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  3662.       also points there unless IO.SYS has installed a special filter for
  3663.       hard disk reads (on systems with model byte FCh and BIOS date
  3664.       "01/10/84" only), in which case it points at the special filter
  3665.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  3666.       functions are still invoked via an INT 13 instruction
  3667.     this is a dangerous security loophole for any virus-monitoring software
  3668.       which does not trap this call ("INT13", "Nomenklatura", and many
  3669.       Bulgarian viruses are known to use it to get the original ROM entry
  3670.       point)
  3671. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  3672. --------N-2F13-------------------------------
  3673. INT 2F U - MS-NET - ???
  3674.     AH = 13h
  3675.     ???
  3676. Return: ???
  3677. Note:    supposedly used to move (or control the movement of) NCBs
  3678. --------U-2F1400-----------------------------
  3679. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  3680.     AX = 1400h
  3681. Return: AL = 00h not installed, OK to install
  3682.          01h not installed, not OK
  3683.          FFh installed
  3684. Notes:    this function is called by the DOS v3.3+ kernel
  3685.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3686.     supported by DR-DOS 5.0
  3687.     documented for MS-DOS 5+, but undocumented in prior versions
  3688. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  3689. --------D-2F1400-----------------------------
  3690. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  3691.     AX = 1400h
  3692. Return: AX = FFFFh if installed
  3693.         BX = maximum memory required to save screen and keyboard info
  3694.     CF clear if successful
  3695.     CF set on error
  3696.         AX = error code
  3697.         0002h invalid function
  3698.         0004h unknown error
  3699. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  3700.       to communicate with the user
  3701. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  3702. --------U-2F1401-----------------------------
  3703. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  3704.     AX = 1401h
  3705.     DS:SI -> internal code page structure (see below)
  3706.     BX = new code page (see INT 21/AX=6602h)
  3707.     DX = country code???
  3708. Return: AL = status
  3709.          00h successful
  3710.          else DOS error code
  3711. Note:    this function is called by the DOS v3.3+ kernel
  3712. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  3713.  
  3714. Format of DOS 3.30 internal code page structure:
  3715. Offset    Size    Description
  3716.  00h  8 BYTEs    ???
  3717.  08h 64 BYTEs    name of country information file
  3718.  48h    WORD    system code page
  3719.  4Ah    WORD    number of supported subfunctions
  3720.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  3721.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  3722.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  3723.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  3724.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  3725. --------D-2F1401-----------------------------
  3726. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  3727.     AX = 1401h
  3728.     DL = function (00h open, 01h close)
  3729.     DH = wait flag
  3730.         00h block until screen opens
  3731.         01h return error if screen is not available
  3732.         02h urgent--always open screen immediately
  3733. Return: CF clear if successful
  3734.         BX = amount of memory needed to save screen and keyboard info,
  3735.         0000h if default save location can be used (only if DH was 02h)
  3736.     CF set on error
  3737. Note:    the application using the screen is frozen until the popup screen is
  3738.       closed
  3739. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  3740. --------U-2F1402-----------------------------
  3741. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  3742.     AX = 1402h
  3743.     BP = subfunction (same as AL for INT 21/AH=65h)
  3744.     BX = code page (see INT 21/AX=6602h)
  3745.     DX = country code (see INT 21/AH=38h)
  3746.     DS:SI -> internal code page structure (see AX=1401h)
  3747.     ES:DI -> user buffer
  3748.     CX = size of user buffer
  3749. Return: AL = status
  3750.         00h successful
  3751.         else DOS error code
  3752. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  3753.     code page structure apparently only needed for COUNTRY.SYS pathname
  3754. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  3755. --------D-2F1402-----------------------------
  3756. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  3757.     AX = 1402h
  3758.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  3759. Return: CF clear if successful
  3760.     CF set on error
  3761.         AX = error code
  3762.         0001h process does not own screen
  3763.         0004h unknown error
  3764.         0005h invalid pointer
  3765. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  3766. --------U-2F1403-----------------------------
  3767. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  3768.     AX = 1403h
  3769.     DS:SI -> internal code page structure (see AX=1401h)
  3770.     BX = code page (see INT 21/AX=6602h)
  3771.     DX = country code (see INT 21/AH=38h)
  3772. Return: AL = status
  3773.          ???
  3774. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  3775. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  3776. --------D-2F1403-----------------------------
  3777. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  3778.     AX = 1403h
  3779.     ES:DI -> buffer containing saved screen
  3780.         (0000h:0000h for default buffer in POPUP)
  3781. Return: CF clear if successful
  3782.     CF set on error
  3783.         AX = error code (see AX=1402h"POPUP")
  3784. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  3785. --------U-2F1404-----------------------------
  3786. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  3787.     AX = 1404h
  3788.     BX = code page (see INT 21/AX=6602h)
  3789.     DX = country code (see INT 21/AH=38h)
  3790.     DS:SI -> internal code page structure (see AX=1401h)
  3791.     ES:DI -> user buffer
  3792. Return: AL = status
  3793.          ???
  3794. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  3795.     code page structure apparently only needed for COUNTRY.SYS pathname
  3796. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  3797. --------U-2F14FE-----------------------------
  3798. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  3799.     AX = 14FEh
  3800.     BX = code page (FFFFh=global code page) (see INT 21/AX=6602h)
  3801.     DX = country ID (FFFFh=current country) (see INT 21/AH=38h)
  3802.     ES:DI -> country information buffer
  3803.     CL = info ID
  3804.         01h get general internationalization info
  3805.         02h get pointer to uppercase table
  3806.         04h get pointer to filename uppercase table
  3807.         05h get pointer to filename terminator table
  3808.         06h get pointer to collating sequence table
  3809.         07h get pointer to Double-Byte Character Set table
  3810.     CF set (used to return error if not installed)
  3811. Return: CF clear if successful
  3812.         DS:SI -> requested information
  3813.     CF set on error
  3814. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3815.       or FFh on entry.
  3816.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  3817.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  3818. SeeAlso: AX=14FFh,INT 21/AH=65h
  3819.  
  3820. Format of DR-DOS COUNTRY.SYS file:
  3821. Offset    Size    Description
  3822.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  3823.  7Eh    WORD    signature EDC1h
  3824.  80h    var    country pointer records
  3825.     Offset    Size    Description
  3826.      00h    WORD    country code (0000h if end of array)
  3827.      02h    WORD    code page
  3828.      04h    WORD    ??? (0000h)
  3829.      06h  7 WORDs    offsets in file for data tables for subfunctions
  3830.             01h-07h
  3831.  var    var    country information
  3832. --------U-2F14FF-----------------------------
  3833. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  3834.     AX = 14FFh
  3835.     BX = code page
  3836. Return: AX = ???
  3837.     ZF set if AX=0000h
  3838. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3839.       or FFh on entry.
  3840.     passes codepage preparation request to each character device supporting
  3841.       the generic IOCTL call
  3842. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  3843. --------U-2F1500-----------------------------
  3844. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  3845.     AX = 1500h
  3846. Return: AX = FFFFh
  3847.     ES:DI -> ??? (graphics data?)
  3848. Note:    this installation check conflicts with the CD-ROM Extensions
  3849.       installation check; moved to AX=AC00h in later versions
  3850. SeeAlso: AX=AC00h
  3851. --------d-2F1500BX0000-----------------------
  3852. INT 2F - CD-ROM - INSTALLATION CHECK
  3853.     AX = 1500h
  3854.     BX = 0000h
  3855. Return: BX = number of CD-ROM drive letters used
  3856.     CX = starting drive letter (0=A:)
  3857. Notes:    this installation check DOES NOT follow the format used by other
  3858.       software
  3859.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  3860.       installation check
  3861. SeeAlso: INT 2F/AX=D000h"Lotus"
  3862. --------d-2F1501-----------------------------
  3863. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  3864.     AX = 1501h
  3865.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  3866. Return: buffer filled, for each drive letter
  3867.       BYTE    subunit number in driver
  3868.       DWORD address of device driver header
  3869. --------d-2F1502-----------------------------
  3870. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  3871.     AX = 1502h
  3872.     ES:BX -> 38-byte buffer for name of copyright file
  3873.     CX = drive number (0=A:)
  3874. Return: CF set if drive is not a CD-ROM drive
  3875.         AX = 000Fh (invalid drive)
  3876.     CF clear if successful
  3877. SeeAlso: AX=1503h
  3878. --------d-2F1503-----------------------------
  3879. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  3880.     AX = 1503h
  3881.     ES:BX -> 38-byte buffer for name of abstract file
  3882.     CX = drive number (0=A:)
  3883. Return: CF set if drive is not a CD-ROM drive
  3884.         AX = 000Fh (invalid drive)
  3885.     CF clear if successful
  3886. SeeAlso: AX=1502h,AX=1504h
  3887. --------d-2F1504-----------------------------
  3888. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  3889.     AX = 1504h
  3890.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  3891.     CX = drive number (0=A:)
  3892. Return: CF set if drive is not a CD-ROM drive
  3893.         AX = 000Fh (invalid drive)
  3894.     CF clear if successful
  3895. SeeAlso: AX=1502h,AX=1503h
  3896. --------d-2F1505-----------------------------
  3897. INT 2F - CD-ROM - READ VTOC
  3898.     AX = 1505h
  3899.     ES:BX -> 2048-byte buffer
  3900.     CX = drive number (0=A:)
  3901.     DX = sector index (0=first volume descriptor,1=second,...)
  3902. Return: CF set on error
  3903.         AX = error code (15=invalid drive,21=not ready)
  3904.     CF clear if successful
  3905.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  3906. --------d-2F1506-----------------------------
  3907. INT 2F - CD-ROM - TURN DEBUGGING ON
  3908.     AX = 1506h
  3909.     BX = debugging function to enable
  3910. Note:    reserved for development
  3911. SeeAlso: AX=1507h
  3912. --------d-2F1507-----------------------------
  3913. INT 2F - CD-ROM - TURN DEBUGGING OFF
  3914.     AX = 1507h
  3915.     BX = debugging function to disable
  3916. Note:    reserved for development
  3917. SeeAlso: AX=1506h
  3918. --------d-2F1508-----------------------------
  3919. INT 2F - CD-ROM - ABSOLUTE DISK READ
  3920.     AX = 1508h
  3921.     ES:BX -> buffer
  3922.     CX = drive number (0=A:)
  3923.     SI:DI = starting sector number
  3924.     DX = number of sectors to read
  3925. Return: CF set on error
  3926.         AL = error code (15=invalid drive,21=not ready)
  3927.     CF clear if successful
  3928. SeeAlso: AX=1509h
  3929. --------d-2F1509-----------------------------
  3930. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  3931.     AX = 1509h
  3932.     ES:BX -> buffer
  3933.     CX = drive number (0=A:)
  3934.     SI:DI = starting sector number
  3935.     DX = number of sectors to write
  3936. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  3937. SeeAlso: AX=1508h
  3938. --------d-2F150A-----------------------------
  3939. INT 2F - CD-ROM - RESERVED
  3940.     AX = 150Ah
  3941. --------d-2F150B-----------------------------
  3942. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  3943.     AX = 150Bh
  3944.     CX = drive number (0=A:)
  3945. Return: BX = ADADh if MSCDEX.EXE installed
  3946.         AX = 0000h if drive not supported
  3947.         nonzero if supported
  3948. SeeAlso: AX=150Dh
  3949. --------d-2F150C-----------------------------
  3950. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  3951.     AX = 150Ch
  3952. Return: BH = major version
  3953.     BL = minor version
  3954. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  3955. --------d-2F150D-----------------------------
  3956. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  3957.     AX = 150Dh
  3958.     ES:BX -> buffer for drive letter list (1 byte per drive)
  3959. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  3960.     to the drive in the same position for function 1501h
  3961. SeeAlso: AX=150Bh
  3962. --------d-2F150E-----------------------------
  3963. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  3964.     AX = 150Eh
  3965.     BX = subfunction
  3966.         00h get preference
  3967.         DX = 0000h
  3968.         Return: DX = preference settings
  3969.         01h set preference
  3970.         DH = volume descriptor preference
  3971.             01h = primary volume descriptor
  3972.             02h = supplementary volume descriptor
  3973.         DL = supplementary volume descriptor preference
  3974.             01h = shift-Kanji
  3975.     CX = drive number (0=A:)
  3976. Return: CF set on error
  3977.         AX = error code (15=invalid drive,1=invalid function)
  3978.     CF clear if successful
  3979. --------d-2F150F-----------------------------
  3980. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  3981.     AX = 150Fh
  3982.     CL = drive number (0=A:)
  3983.     CH bit 0 = copy flag
  3984.         clear if direct copy
  3985.         set if copy to structure which removes ISO/High Sierra diffs
  3986.     ES:BX -> ASCIZ path name
  3987.     SI:DI -> buffer for directory entry (see below)
  3988.          minimum 255 bytes for direct copy
  3989. Return: CF set on error
  3990.         AX = error code
  3991.     CF clear if successful
  3992.         AX = disk format (0=High Sierra,1=ISO 9660)
  3993.  
  3994. Format of directory entry (direct copy):
  3995. Offset    Size    Description
  3996.  00h    BYTE  length of directory entry
  3997.  01h    BYTE  length of XAR in Logical Block Numbers
  3998.  02h    DWORD LBN of data, Intel (little-endian) format
  3999.  06h    DWORD LBN of data, Motorola (big-endian) format
  4000.  0Ah    DWORD length of file, Intel format
  4001.  0Eh    DWORD length of file, Motorola format
  4002. ---High Sierra---
  4003.  12h  6 BYTEs date and time
  4004.  18h    BYTE  bit flags
  4005.  19h    BYTE  reserved
  4006. ---ISO 9660---
  4007.  12h  7 BYTEs date and time
  4008.  19h    BYTE  bit flags
  4009. ---both formats---
  4010.  1Ah    BYTE  interleave size
  4011.  1Bh    BYTE  interleave skip factor
  4012.  1Ch    WORD  volume set sequence number, Intel format
  4013.  1Eh    WORD  volume set sequence number, Motorola format
  4014.  20h    BYTE  length of file name
  4015.  21h  N BYTEs file name
  4016.     BYTE (optional) padding if filename is odd length
  4017.       N BYTEs system data
  4018.  
  4019. Format of directory entry (canonicalized):
  4020. Offset    Size    Description
  4021.  00h    BYTE    length of XAR in Logical Block Numbers
  4022.  01h    DWORD    Logical Block Number of file start
  4023.  05h    WORD    size of disk in logical blocks
  4024.  07h    DWORD    file length in bytes
  4025.  0Bh  7 BYTEs    date and time
  4026.  12h    BYTE    bit flags
  4027.  13h    BYTE    interleave size
  4028.  14h    BYTE    interleave skip factor
  4029.  15h    WORD    volume set sequence number
  4030.  17h    BYTE    length of file name
  4031.  18h 38 BYTEs    ASCIZ filename
  4032.  3Eh    WORD    file version number
  4033.  40h    BYTE    number of bytes of system use data
  4034.  41h 220 BYTEs    system use data
  4035. --------d-2F1510-----------------------------
  4036. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  4037.     AX = 1510h
  4038.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  4039.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  4040. --------W-2F1600-----------------------------
  4041. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  4042.     AX = 1600h
  4043. Return: AL = status
  4044.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  4045.         01h Windows/386 2.x running
  4046.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  4047.          mode nor Windows/386 2.x running) (obsolete--see note)
  4048.         FFh Windows/386 2.x running
  4049.     AL = anything else
  4050.         AL = Windows major version number >= 3
  4051.         AH = Windows minor version number
  4052. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  4053.       drivers, TSRs, and applications) to cooperate with multitasking
  4054.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  4055.     certain calls are also supported in the Microsoft 80286 DOS extender in
  4056.       Windows standard mode
  4057.     this function served as the installation check and AX=1610h served to
  4058.       get the driver entry point for XMS version 1, which is now obsolete.
  4059.       Use AX=4300h and AX=4310h instead
  4060. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  4061. Index:    installation check;XMS version 1
  4062. --------W-2F1602-----------------------------
  4063. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  4064.     AX = 1602h
  4065. Return: ES:DI -> Windows/386 2.x API procedure entry point
  4066. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  4067.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  4068.         AX = 0000h
  4069.         ES:DI -> return address
  4070.         JUMP to address returned from INT 2F/AX=1602h
  4071.     After JUMP, at return address:
  4072.         BX = current VM ID.
  4073. SeeAlso: AX=C020h
  4074. --------W-2F1603-----------------------------
  4075. INT 2F - MS Windows/386 - GET INSTANCE DATA
  4076.     AX = 1603h
  4077. Return: AX = 5248h ('RH') if supported
  4078.         DS:SI -> Windows/386 instance data (see below)
  4079. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  4080.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  4081.       supported, as is the case in DOS versions prior to 5.0
  4082.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  4083.       this function, DOSMGR's behavior, and instancing in general
  4084. SeeAlso: AX=1607h/BX=0015h
  4085.  
  4086. Format of Windows/386 instance data:
  4087. Offset    Size    Description
  4088.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  4089.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  4090.         0000h if not applicable
  4091.  04h    WORD    number of instance data entries (max 32)
  4092.  06h    Array of instance data entries
  4093.     Offset    Size    Description
  4094.      00h    WORD    segment (0002h = DOS kernel)
  4095.      02h    WORD    offset
  4096.      04h    WORD    size
  4097. --------W-2F1605-----------------------------
  4098. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  4099.     AX = 1605h
  4100.     ES:BX = 0000h:0000h
  4101.     DS:SI = 0000h:0000h
  4102.     CX = 0000h
  4103.     DX = flags
  4104.         bit 0 = 0 if Windows enhanced-mode initialization
  4105.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  4106.         bits 1-15 reserved (undefined)
  4107.     DI = version number (major in upper byte, minor in lower)
  4108. Return: CX = 0000h if okay for Windows to load
  4109.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  4110.     CX <> 0 if Windows should not load
  4111.     ES:BX -> startup info structure (see below)
  4112.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  4113. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  4114.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  4115.       driver or TSR can watch for this broadcast and return the appropriate
  4116.       values.  If the driver or TSR returns CX <> 0, it is also its
  4117.       responsibility to display an error message.
  4118.     each handler must first chain to the prior INT 2F handler with
  4119.       registers unchanged before processing the call
  4120.     if the handler requires local data on a per-VM basis, it must store the
  4121.       returned ES:BX in the "next" field of a startup info structure and
  4122.       return a pointer to that structure in ES:BX
  4123.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  4124.       already nonzero, the TSR must fail the initialization by setting CX
  4125.       nonzero
  4126.     MSD checks for Windows 3.0 running in standard mode by testing whether
  4127.       CX=FFFFh and other registers are unchanged on return
  4128. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  4129.  
  4130. Format of Startup Information Structure:
  4131. Offset    Size    Description
  4132.  00h  2 BYTEs    major, minor version of info structure
  4133.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  4134.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  4135.  0Ah    DWORD    virtual device reference data (see below)
  4136.         (only used if above nonzero)
  4137.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  4138.  
  4139. Format of one Instance Item in array:
  4140. Offset    Size    Description
  4141.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  4142.  04h    WORD    size of instance data
  4143.  
  4144. Format of Virtual Device Reference Data:
  4145. Offset    Size    Description
  4146.  00h    DWORD    physical address of ??? or 00000000h
  4147.  04h    DWORD    physical address of ??? table
  4148.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  4149.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  4150.         00000000h = end of table
  4151. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  4152.       chain, the second pointer to a field of 40h bytes followed by a
  4153.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  4154.       the start segment of the UMB area
  4155.  
  4156. Virtual mode enable/disable procedure called with:
  4157.     AX = 0000h disable V86 mode
  4158.     AX = 0001h enable V86 mode
  4159.     interrupts disabled
  4160. Return: CF set on error
  4161.     CF clear if successful
  4162.     interrupts disabled
  4163. --------W-2F1606-----------------------------
  4164. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  4165.     AX = 1606h
  4166.     DX = flags
  4167.         bit 0 = 0 if Windows enhanced-mode exit
  4168.         bit 0 = 1 if Microsoft 286 DOS extender exit
  4169.         bits 1-15 reserved (undefined)
  4170. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  4171.       broadcast will be issued immediately.
  4172.     this call will be issued in real mode
  4173. SeeAlso: AX=1605h,AX=1609h
  4174. --------W-2F1607-----------------------------
  4175. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  4176.     AX = 1607h
  4177.     BX = virtual device ID (see INT 2F/AX=1684h)
  4178.     CX = (usually) callout subfunction
  4179. Return: (usually) AX,BX,CX,DX,ES contain results
  4180. Notes:    more of a convention than an API, this call specifies a standard
  4181.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  4182.       to DOS device drivers and TSRs
  4183.     see below for details on several virtual devices
  4184. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  4185. SeeAlso: AX=1684h,AX=C020h
  4186. --------W-2F1607BX0006-----------------------
  4187. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  4188.     AX = 1607h
  4189.     BX = 0006h (VxD identifier of "V86MMGR")
  4190.     CX = 0000h
  4191. Return: AX = status
  4192.         0000h if local A20 state changed
  4193.         1607h if A20 unchanged
  4194.         other if global A20 state changed
  4195. --------W-2F1607BX000C-----------------------
  4196. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  4197.     AX = 1607h
  4198.     BX = 000Ch (VxD identifier of "VMD")
  4199. Return: CX = nonzero if mouse driver already virtualized
  4200. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  4201.       nonzero; if yes, it will not automatically virtualize the mouse
  4202.       driver.  This would be used if MOUSE.COM already virtualizes
  4203.       itself using the Windows API.
  4204. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  4205. --------W-2F1607BX0014-----------------------
  4206. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  4207.     AX = 1607h
  4208.     BX = 0014H (VxD identifier of "VNETBIOS")
  4209. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  4210.         command code (see below)
  4211. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  4212.       the NetBIOS has an extensions Windows should know about
  4213. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0015h
  4214.  
  4215. Values for action code:
  4216.  00h    "VN_Unknown" unknown command
  4217.  04h    "VN_No_Map"  no memory mapping necessary
  4218.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  4219.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  4220.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  4221.  14h    "VN_Chain_Send"     the chain-send command
  4222.  18h    "VN_Cancel"    special case for cancel command
  4223.  1Ch    "VN_Buffer_In"    buffer is incoming
  4224.  20h    "VN_Buffer_Out" buffer is outgoing
  4225.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  4226. --------D-2F1607BX0015-----------------------
  4227. INT 2F - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  4228.     AX = 1607h
  4229.     BX = 0015h (VxD identifier of "DOSMGR")
  4230.     CX = function
  4231.         0000h query instance processing
  4232.         DX = 0000h
  4233.         Return: CX = state
  4234.                 0000h not instanced
  4235.                 other instanced (DOS 5+ kernel returns 0001h)
  4236.                 DX = segment of DOS drivers or 0000h for
  4237.                     default of 0070h
  4238.                 ES:BX -> patch table (see below)
  4239.         0001h set patches in DOS
  4240.         DX = bit mask of patch requests
  4241.             bit 0 enable critical sections
  4242.             bit 1 NOP setting/checking user ID
  4243.             bit 2 turn INT 21/AH=3Fh on STDIN into polling loop
  4244.             bit 3 trap stack fault in "SYSINIT" to WIN386
  4245.             bit 4 BIOS patch to trap "Insert disk X:" to WIN386
  4246.         Return: AX = B97Ch
  4247.             BX = bit mask of patches applied
  4248.             DX = A2ABh
  4249.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  4250.         DX = bit mask of patch requests (see function 0001h)
  4251.         0003h get size of DOS data structures
  4252.         DX = bit mask of request (only one bit can be set)
  4253.             bit 0: Current Directory Structure size
  4254.         Return: if supported request:
  4255.                 AX = B97Ch
  4256.                 CX = size in bytes of requested structure
  4257.                 DX = A2ABh
  4258.             else:
  4259.                 all registers preserved
  4260.         0004h determine instanced data structures
  4261.         Return: AX = B97Ch if supported
  4262.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  4263.             BX = bit mask of instanced items
  4264.                 bit 0: CDS
  4265.                 bit 1: SFT
  4266.                 bit 2: device list
  4267.                 bit 3: DOS swappable data area
  4268.         0005h get device driver size
  4269.         ES = segment of device driver
  4270.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  4271.             DX:AX = A2ABh:B97Ch if successful
  4272.                 BX:CX = size of device driver in bytes
  4273. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  4274.       been instanced via this API and will not perform its own default
  4275.       instancing of the normal DOS/BIOS data if so; if this API is not
  4276.       supported, DOSMGR will also try to access instancing data through
  4277.       INT 2F/AX=1603h
  4278.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  4279.       tables of instancing information for earlier versions of DOS
  4280.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  4281.       DOSMGR's behavior and instancing in general
  4282. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  4283.  
  4284. Format of patch table:
  4285. Offset    Size    Description
  4286.  00h  2 BYTEs    DOS version (major, minor)
  4287.  02h    WORD    offset in DOS data segment of "SAVEDS"
  4288.  04h    WORD    offset in DOS data segment of "SAVEBX"
  4289.  06h    WORD    offset in DOS data segment of InDOS flag
  4290.  08h    WORD    offset in DOS data segment of User ID word
  4291.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  4292.         critical section calls (see INT 2A/AH=80h)
  4293.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  4294.         containing segment of last MCB in conventional memory
  4295. --------E-2F1607BX22C0-----------------------
  4296. INT 2F - Rational Systems DOS/4GW - ???
  4297.     AX = 1607h
  4298.     BX = 22C0h
  4299.     ???
  4300. Return: ???
  4301. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  4302. --------W-2F1608-----------------------------
  4303. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  4304.     AX = 1608h
  4305. Notes:    called after all installable devices have been initialized
  4306.     real-mode software may be called between the Windows enhanced-mode init
  4307.       call (AX=1605h) and this call; the software must detect this
  4308.       situation
  4309. SeeAlso: AX=1605h,AX=1609h
  4310. --------W-2F1609-----------------------------
  4311. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  4312.     AX = 1609h
  4313. Note:    called at the beginning of a normal exit sequence; not made in the
  4314.       event of a fatal system crash
  4315. SeeAlso: AX=1606h,AX=1608h
  4316. --------W-2F160A-----------------------------
  4317. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  4318.     AX = 160Ah
  4319. Return: AX = 0000h if call supported
  4320.         BX = version (BH=major, BL=minor)
  4321.         CX = mode (0002h = standard, 0003h = enhanced)
  4322. SeeAlso: AX=1600h,AX=4680h
  4323. --------W-2F160B-----------------------------
  4324. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  4325.     AX = 160Bh
  4326.     ES:DI -> communication structure (see below) or 0000h:0000h
  4327. Return: ES:DI -> communication structure
  4328. Desc:    this call allows Windows-aware TSRs to make themselves known to
  4329.       Windows.
  4330. Note:    the TSR should allocate a communication structure, place the given
  4331.       ES:DI pointer in the first field, and return a pointer to the new
  4332.       structure
  4333. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  4334.  
  4335. Format of TSR-to-Windows communication structure:
  4336. Offset    Size    Description
  4337.  00h    DWORD    pointer to next structure
  4338.  04h    WORD    PSP segment
  4339.  06h    WORD    API version ID (0100h)
  4340.  08h    WORD    EXEC flags
  4341.         bit 0: "WINEXEC"
  4342.         bit 1: "LOADLIBRARY"
  4343.         bit 2: "OPENDRIVER"
  4344.  0Ah    WORD    "exec_cmd_show"
  4345.  0Ch    DWORD    "exec_cmd"
  4346.  10h  4 BYTEs    reserved (0)
  4347.  14h    DWORD    pointer to TSR ID block (see below)
  4348.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  4349.  
  4350. Format of Norton Utilities 6.0 TSR ID block:
  4351. Offset    Size    Description
  4352.  00h    WORD    length of name string
  4353.  02h  N BYTEs    name of TSR's executable
  4354. --------W-2F160C-----------------------------
  4355. INT 2F - MS Windows 3.1 - DETECT ROMs
  4356.     AX = 160Ch
  4357.     ???
  4358. Return: ???
  4359. Note:    used by ROM Windows
  4360. SeeAlso: AX=160Bh
  4361. --------m-2F1610-----------------------------
  4362. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  4363.     AX = 1610h
  4364.     details unavailable
  4365. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  4366.       obsolete.  Use AX=4300h and AX=4310h instead
  4367. SeeAlso: AX=1600h,AX=4310h
  4368. --------W-2F1680-----------------------------
  4369. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  4370.     AX = 1680h
  4371. Return: AL = 00h if the call is supported
  4372.     AL = 80h (unchanged) if the call is not supported
  4373. Notes:    programs can use this function in idle loops to enhance performance
  4374.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  4375.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  4376.       applications
  4377.     does not block the program; it just gives up the remainder of the time
  4378.       slice
  4379.     should not be used by Windows-specific programs
  4380. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  4381. --------W-2F1681-----------------------------
  4382. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  4383.     AX = 1681h
  4384. Notes:    used to prevent a task switch from occurring
  4385.     should be followed by an INT 2F/AX=1682h call as soon as possible
  4386.     nested calls are allowed, and must be followed by an appropriate number
  4387.       of "end critical section" calls
  4388.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  4389.       increment by hand.
  4390. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  4391. --------W-2F1682-----------------------------
  4392. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  4393.     AX = 1682h
  4394. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  4395.       and decrement by hand, taking care not to decrement InDOS flag
  4396.       through zero
  4397. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  4398. --------W-2F1683-----------------------------
  4399. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  4400.     AX = 1683h
  4401. Return: BX = current virtual machine (VM) ID
  4402. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  4403.     VM IDs are reused when VMs are destroyed
  4404.     an ID of 0 will never be returned
  4405. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  4406. --------W-2F1684-----------------------------
  4407. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  4408.     AX = 1684h
  4409.     BX = virtual device (VxD) ID (see below)
  4410.     ES:DI = 0000h:0000h
  4411. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  4412. Note:    some Windows enhanced-mode virtual devices provide services that
  4413.       applications can access.  For example, the Virtual Display Device
  4414.       (VDD) provides an API used in turn by WINOLDAP.
  4415. SeeAlso: AX=1683h
  4416.  
  4417. Values for VxD ID:
  4418. Value  Name    CallOut V86 PM    Description
  4419.  01h    VMM        N  N    Virtual Machine Manager
  4420.  02h    Debug
  4421.  03h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  4422.  04h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  4423.  05h    VTD        Y  Y    Virtual Timer Device
  4424.  06h    V86MMGR        N  N    Virtual 8086 Mode Device
  4425.  07h    PageSwap    N  N    Paging Device
  4426.  08h    Parity        N  N    Parity-check trapper
  4427.  09h    Reboot        N  Y    Ctrl-Alt-Del handler
  4428.  0Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  4429.  0Bh    VSD        N  N    Virtual Sound Device
  4430.  0Ch    VMD      Y    Y  Y    Virtual Mouse Device
  4431.  0Dh    VKD        N  Y    Virtual Keyboard Device
  4432.  0Eh    VCD        N  Y    Virtual COMM Device
  4433.  0Fh    VPD            Virtual Printer Device
  4434.  10h    VHD            Virtual Hard Disk Device (Windows 3.0)
  4435.  10h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  4436.  10h    IOS        N  Y    (Chicago)
  4437.  11h    VMCPD        Y  Y    Virtual Math CoProcessor Device
  4438.  12h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  4439.  13h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  4440.  14h    VNETBIOS  Y    N  N    Virtual NetBIOS Device
  4441.  15h    DOSMGR        Y  N
  4442.  16h    WINLOAD
  4443.  17h    SHELL        N  Y
  4444.  18h    VMPOLL        N  N
  4445.  19h    VPROD
  4446.  1Ah    DOSNET        N  N    assures network integrity across VMs
  4447.  1Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  4448.  1Bh    VFD        N  N    Virtual Floppy Device
  4449.  1Ch    VDD2            Secondary display adapter
  4450.  1Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  4451.  1Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  4452.  1Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  4453.  1Dh    WINDEBUG    N  Y
  4454.  1Dh    TDDebug        N  Y
  4455.  1Eh    TSRLoad            TSR instance utility
  4456.  1Fh    BiosHook        BIOS interrupt hooker VxD
  4457.  20h    Int13       N    N  N
  4458.  21h    PageFile    N  Y    Paging File device
  4459.  22h    SCSI
  4460.  23h    MCA_POS
  4461.  24h    SCSIFD            SCSI FastDisk device
  4462.  25h    VPEND            Pen device
  4463.  26h    APM            Advanced Power Management
  4464.  27h    VXDLDR        Y  Y    (Chicago)
  4465.  2Ah    VWIN32        N  Y    (Chicago)
  4466.  2Bh    VCOMM        Y  Y    (Chicago)
  4467.  30h    MACH32        N  Y    ATI Mach32 video card
  4468.  33h    CONFIGMG    Y  Y    (Chicago)
  4469.  33h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  4470.  36h    VFBACKUP    Y  Y    (Chicago)
  4471.  38h    VCOND        Y  Y    (Chicago)
  4472.  51h    ISAPNP        N  N
  4473.  8Dh    ESDI_506    N  N    (Chicago)
  4474.  90h    voltrack    N  N
  4475.  FDh    FAKEIDE        N  N    (Chicago)
  4476. 0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  4477. 0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  4478. 0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  4479. 0202h    WINICE        Y  Y    SoftICE/W
  4480. 0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  4481. 0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  4482. 0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  4483. 0234h    VCOMMUTE    Y  Y    PC Tools Commute
  4484. 0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  4485. 0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  4486. 0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  4487. 0460h    UNIMODEM    N  Y
  4488. 0483h    VSHARE        N  N    Windows for Workgroups Virtual SHARE
  4489. 0484h    IFSMgr        Y  N    (Chicago) installable file system manager
  4490. 0486h    VFAT        Y  Y    (Chicago)
  4491. 048Bh    VCACHE        Y  Y
  4492. 1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  4493. 1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  4494. 1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  4495. 21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  4496. 2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  4497. 2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  4498. 24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  4499. 24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  4500. 2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  4501. 2860h    COMMTASK   N    N  Y    Windows 386-mode preemptive tasker by James
  4502.                 A. Kenemuth of Interabang Computing
  4503. 28C0h    VXD       N    Y  Y    Generic VxD for real and protected mode by
  4504.                 Andrew Schulman in MSJ February 1993
  4505. 292Dh    VSBPD        Y  Y    Sound Blaster Pro
  4506. 3098h    VstlthD       N    N  N    for QEMM Stealth ROM mode
  4507. 310eh    WPS        N  N    MS DevNet CD-ROM: Windows Process Status
  4508. 7FE0h    VWFD       N    Y  Y    ??? by Neil Sandlin of Microsoft
  4509. 7FE1h    VWATCHD       N    Y  Y    basic driver w/ no functionality except tracing
  4510.                 by Keith Jin of Microsoft PSS
  4511. 7FE5h    VFINTD       N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  4512.                 Sandlin of Microsoft
  4513. 7FE7h    VMPAGES       N    Y  Y    demonstration of exporting VxD services, by
  4514.                 Neil Sandlin of Microsoft
  4515. 7FE9h    VIdleD       N    N  N    demonstration of Call_When_Idle function, by
  4516.                 Bernie McIlroy of Microsoft
  4517. 7FEBh    VMIOD       N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  4518.                 Sandlin of Microsoft
  4519. 7FEDh    VMIRQD       N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  4520.                 Sandlin of Microsoft
  4521. Note:    The high bit of the VxD ID is reserved for future use. The
  4522.     next 10 bits are the OEM # which is assigned by Microsoft. The
  4523.     low 5 bits are the device number.  Naturally, this scheme has not
  4524.     been adhered to since there are now more than 32 different VxDs.
  4525.  
  4526. Call VTD.386 entry point with:
  4527.     AX = 0000h get VTD version number
  4528.         Return: AH = major version
  4529.             AL = minor version
  4530.     AX = 0100h get current clock tick time
  4531.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  4532.                 started
  4533.     AX = 0101h get current system time in milliseconds
  4534.         Return: EAX = time in milliseconds that Windows has been running
  4535.     AX = 0102h get current virtual machine time
  4536.         Return: EAX = cumulative amount of time the virtual machine has
  4537.             been active, in milliseconds
  4538. Note:    should only be called directly when TOOLHELP.DLL TimerCount() cannot
  4539.       be called
  4540.  
  4541. Call VADMAD entry point with:
  4542.     DX = operation
  4543.         0000h set VADMAD mode
  4544.         AX = desired mode
  4545.         0001h set VADMAD channel
  4546.         AX = desired channel
  4547. Note:    after setting mode/channel, start the DMA operation with an OUT to
  4548.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  4549. --------W-2F1685-----------------------------
  4550. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  4551.     AX = 1685h
  4552.     BX = VM ID of virtual machine to switch to
  4553.     CX = flags
  4554.         bit 0 wait until interrupts enabled
  4555.         bit 1 wait until critical section unowned
  4556.         bits 2-15 reserved (zero)
  4557.     DX:SI = priority boost (see VMM.INC)
  4558.     ES:DI -> FAR procedure to callback
  4559. Return: CF set on error
  4560.         AX = error code
  4561.         01h invalid VM ID
  4562.         02h invalid priority boost
  4563.         03h invalid flags
  4564.     CF clear if successful
  4565.         event will be or has been called
  4566. Notes:    some DOS devices, such as networks, need to call functions in a
  4567.       specific VM. This call forces the appropriate VM to be installed.
  4568.     the callback procedure must preserve all registers and return with IRET
  4569. SeeAlso: AX=1683h,INT 15/AX=1117h
  4570. --------E-2F1686-----------------------------
  4571. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  4572.     AX = 1686h
  4573. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  4574.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  4575. SeeAlso: AX=1687h
  4576. --------E-2F1687-----------------------------
  4577. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  4578.     AX = 1687h
  4579. Return: AX = 0000h if installed
  4580.         BX = flags
  4581.         bit 0: 32-bit programs supported
  4582.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4583.         DH = DPMI major version
  4584.         DL = two-digit DPMI minor version (binary)
  4585.         SI = number of paragraphs of DOS extender private data
  4586.         ES:DI -> DPMI mode-switch entry point
  4587.     AX nonzero if not installed
  4588. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  4589. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h
  4590.  
  4591. Call mode switch entry point with:
  4592.     AX = flags
  4593.         bit 0: set if 32-bit program
  4594.     ES = real mode segment of buffer for DPMI private data (ignored if
  4595.         SI was zero)
  4596. Return: CF set on error
  4597.         program still in real mode
  4598.         AX = error code (DPMI 1.0+)
  4599.            8011h unable to allocate all necessary descriptors
  4600.            8021h 32-bit program specified, but 16-bit DPMI host
  4601.     CF clear if successful
  4602.         CS = 16-bit selector corresponding to real-mode CS
  4603.         SS = selector corresponding to real-mode SS (64K limit)
  4604.         DS = selector corresponding to real-mode DS (64K limit)
  4605.         ES = selector to program's PSP (100h byte limit)
  4606.         FS = GS = 0
  4607.         high word of ESP = 0 if 32-bit program
  4608.         program now in protected mode
  4609. Note:    this entry point is only called for the initial switch to protected
  4610.       mode
  4611. --------W-2F1688-----------------------------
  4612. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT
  4613.     AX = 1688h
  4614. Return: AX = status??? (0000h for 386MAX)
  4615.     BX = selector for ???
  4616. --------W-2F1689-----------------------------
  4617. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  4618.     AX = 1689h
  4619.     ???
  4620. Return: ???
  4621. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  4622. --------E-2F168A-----------------------------
  4623. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  4624.     AX = 168Ah
  4625.     DS:(E)SI = selector:offset of ASCIZ vendor name
  4626. Return: AL = status
  4627.         00h successful
  4628.            ES:(E)DI -> extended API entry point
  4629.         8Ah unsuccessful
  4630. Notes:    the vendor name is used to determine which entry point to return; it is
  4631.       case-sensitive
  4632.     available in protected mode only
  4633.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  4634.     this call is present but not documented for DPMI 0.9
  4635.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  4636.       other than the MS-DOS one gracefully, producing an unhandled
  4637.       exception report; this has been fixed in the Borland Pascal 7 version
  4638. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  4639.  
  4640. Vendor names:
  4641.  "MS-DOS"    ??? and 386MAX v6.00+
  4642.  "386MAX"    386MAX v6.00+
  4643.  "HELIX_DPMI"    Helix Netroom's DPMI server
  4644.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286
  4645.  
  4646. Call Phar Lap RUN286 entry point with:
  4647.     AX = 0000h (function "load MSW")
  4648.     BX = new value for MSW register (low word of CR0)
  4649. Return: ???
  4650. --------W-2F168B-----------------------------
  4651. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  4652.     AX = 168Bh
  4653.     BX = virtual machine ID (see AX=1683h)
  4654. Return: AL = 00h if focus set to specified VM
  4655. Note:    documented on the Microsoft Developer's Network CD-ROM
  4656. SeeAlso: AX=1683h
  4657. --------W-2F168C-----------------------------
  4658. INT 2F - MS Windows 3.1 - RESTART COMMAND
  4659.     AX = 168Ch
  4660.     ???
  4661. Return: ???
  4662. Note:    WIN.COM executes specified application
  4663. --------W-2F1700-----------------------------
  4664. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  4665.     AX = 1700h
  4666. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  4667.     AX <> 1700h
  4668.         AL = WINOLDAP major version
  4669.         AH = WINOLDAP minor version
  4670. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  4671.       "old" (character-mode) application access to Dynamic Data Exchange,
  4672.       menus, and the Windows clipboard.
  4673. Note:    this installation check DOES NOT follow the format used by other
  4674.       software of returning AL=FFh
  4675. Index:    installation check;WINOLDAP
  4676. --------W-2F1701-----------------------------
  4677. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  4678.     AX = 1701h
  4679. Return: AX <> 0     success
  4680.     AX = 0     clipboard is already open
  4681. --------W-2F1702-----------------------------
  4682. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  4683.     AX = 1702h
  4684. Return: AX <> 0     clipboard has been emptied
  4685.     AX = 0     failure
  4686. --------W-2F1703-----------------------------
  4687. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  4688.     AX = 1703h
  4689.     DX = clipboard format supported by WinOldAp:
  4690.         01h text
  4691.         02h bitmap
  4692.         03h metafile picture
  4693.         04h SYLK
  4694.         05h DIF
  4695.         06h TIFF
  4696.         07h OEM text
  4697.         81h DSP text
  4698.         82h DSP bitmap
  4699.     ES:BX -> data (see below)
  4700.     SI:CX = size of data
  4701. Return: AX <> 0 data copied into the Clipboard
  4702.     AX = 0 failure
  4703.  
  4704. Format of bitmap:
  4705. Offset    Size    Description
  4706.  00h    WORD    type (0000h)
  4707.  02h    WORD    width of bitmap in pixels
  4708.  04h    WORD    height of bitmap in pixels
  4709.  06h    WORD    bytes per line
  4710.  08h    BYTE    number of color planes
  4711.  09h    BYTE    number of adjacent color bits in pixel
  4712.  0Ah    DWORD    pointer to start of data
  4713.  0Eh    WORD    width in 0.1mm units
  4714.  10h    WORD    height in 0.1mm units
  4715.  12h  N BYTEs    bitmap data
  4716.  
  4717. Format of metafile picture:
  4718. Offset    Size    Description
  4719.  00h    WORD    mapping mode
  4720.  02h    WORD    X extent
  4721.  04h    WORD    Y extent
  4722.  06h    WORD    picture data
  4723. --------W-2F1704-----------------------------
  4724. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  4725.     AX = 1704h
  4726.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4727. Return:     DX:AX = size of data in bytes, including any headers
  4728. Failure: DX:AX = 0  no data in this format in the Clipboard
  4729. --------W-2F1705-----------------------------
  4730. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  4731.     AX = 1705h
  4732.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4733.     ES:BX -> buffer
  4734. Return: AX <> 0     success
  4735.     AX = 0     error, or no data in this format in Clipboard
  4736. --------W-2F1708-----------------------------
  4737. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  4738.     AX = 1708h
  4739. Return: AX <> 0 success
  4740.     AX = 0 failure
  4741. --------W-2F1709-----------------------------
  4742. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  4743.     AX = 1709h
  4744.     SI:CX = desired size in bytes
  4745. Return: DX:AX = number of bytes in largest block of free memory
  4746. Note:    WinOldAp is responsible for including the size of any headers
  4747. --------W-2F170A-----------------------------
  4748. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  4749.     AX = 170Ah
  4750.     DX = GDI information index
  4751.         00h device driver version
  4752.         02h device classification
  4753.         04h width in mm
  4754.         06h height in mm
  4755.         08h width in pixels
  4756.         0Ah height in pixels
  4757.         0Ch bits per pixel
  4758.         0Eh number of bit planes
  4759.         10h number of brushes supported by device
  4760.         12h number of pens supported by device
  4761.         14h number of markers supported by device
  4762.         16h number of fonts supported by device
  4763.         18h number of colors
  4764.         1Ah size required for device descriptor
  4765.         1Ch curve capabilities
  4766.         1Eh line capabilities
  4767.         20h polygon capabilities
  4768.         22h text capabilities
  4769.         24h clipping capabilities
  4770.         26h bitblt capabilities
  4771.         28h X aspect
  4772.         2Ah Y aspect
  4773.         2Ch length of hypotenuse of aspect
  4774.         58h logical pixels per inch of width
  4775.         5Ah logical pixels per inch of height
  4776. Return:     AX = integer value of the desired item (see below)
  4777. Note:  This function returns the device-capability bits for the given display
  4778.  
  4779. Values for device classification:
  4780.  00h    vector plotter
  4781.  01h    raster display
  4782.  02h    raster printer
  4783.  03h    raster camera
  4784.  04h    character-stream, PLP
  4785.  05h    Metafile, VDM
  4786.  06h    display-file
  4787.  
  4788. Bitfields for curve capabilities:
  4789.  bit 0    circles
  4790.  bit 1    pie wedges
  4791.  bit 2    chord arcs
  4792.  bit 3    ellipses
  4793.  bit 4    wide lines
  4794.  bit 5    styled lines
  4795.  bit 6    wide styled lines
  4796.  bit 7    interiors
  4797.  
  4798. Bitfields for line capabilities:
  4799.  bit 1    polylines
  4800.  bit 2    markers
  4801.  bit 3    polymarkers
  4802.  bit 4    wide lines
  4803.  bit 5    styled lines
  4804.  bit 6    wide styled lines
  4805.  bit 7    interiors
  4806.  
  4807. Bitfields for polygon capabilities:
  4808.  bit 0    polygons
  4809.  bit 1    rectangles
  4810.  bit 2    trapezoids
  4811.  bit 3    scanlines
  4812.  bit 4    wide borders
  4813.  bit 5    styled borders
  4814.  bit 6    wide styled borders
  4815.  bit 7    interiors
  4816.  
  4817. Bitfields for text capabilities:
  4818.  bit 0    output precision character
  4819.  bit 1    output precision stroke
  4820.  bit 2    clippping precision stroke
  4821.  bit 3    90-degree character rotation
  4822.  bit 4    arbitrary character rotation
  4823.  bit 5    independent X and Y scaling
  4824.  bit 6    double-size
  4825.  bit 7    integer scaling
  4826.  bit 8    continuous scaling
  4827.  bit 9    bold
  4828.  bit 10 italic
  4829.  bit 11 underline
  4830.  bit 12 strikeout
  4831.  bit 13 raster fonts
  4832.  bit 14 vector fonts
  4833.  bit 15 reserved
  4834.  
  4835. Values for clipping capabilities:
  4836.  00h    none
  4837.  01h    clipping to rectangles
  4838.  
  4839. Bitfields for raster capabilities:
  4840.  bit 0    simple bitBLT
  4841.  bit 1    device requires banding support
  4842.  bit 2    device requires scaling support
  4843.  bit 3    supports >64K bitmap
  4844. ----------2F18-------------------------------
  4845. INT 2F U - MS-Manager
  4846.     AH = 18h
  4847.     ???
  4848. Return: ???
  4849. --------l-2F1900-----------------------------
  4850. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  4851.     AX = 1900h
  4852. Return: AL = 00h  not installed
  4853.          FFh  installed
  4854. --------l-2F1901BL00-------------------------
  4855. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  4856.     AX = 1901h
  4857.     BL = 00h if SHELLC transient
  4858.          01h if SHELLC resident
  4859.     DS:DX -> far call entry point for resident SHELLC.EXE
  4860. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  4861. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  4862. --------l-2F1902-----------------------------
  4863. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  4864.     AX = 1902h
  4865.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  4866.          final filename element uppercased
  4867.     DS:DX -> buffer for results
  4868. Return: AL = 00h  failed, either
  4869.           (a) final filename element quoted at ES:DI does not match
  4870.               identity of shell batch file quoted as parameter of most
  4871.               recent call of SHELLB command, or
  4872.           (b) no more Program Start Commands available.
  4873.     AL= FFh     success, then:
  4874.         memory at DS:[DX+1] onwards filled as:
  4875.         DX+1:    BYTE    count of bytes of PSC
  4876.         DX+2: N BYTEs    Program Start Command text
  4877.             BYTE    0Dh terminator
  4878. Explanation: COMMAND.COM executes the result of this call in preference to
  4879.     reading a command from a batch file. Thus the batch file does not
  4880.     advance in execution for so long as SHELLB provides PSCs from its
  4881.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  4882.     menu interface. The final PSC of a sequence is finished with a
  4883.     GOTO COMMON, which causes a loop back in the batch file which called
  4884.     SHELLC so as to execute SHELLC again. The check on batch file name
  4885.     permits PSCs to CALL nested batch files while PSCs are still stacked
  4886.     up for subsequent execution.
  4887. --------l-2F1903-----------------------------
  4888. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  4889.     AX = 1903h
  4890.     ES:DI -> ASCIZ batch file name as for AX=1902h
  4891. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  4892.     AL = 00h if it does not
  4893. --------l-2F1904-----------------------------
  4894. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  4895.     AX = 1904h
  4896. Return: ES:DI -> name of current shell batch file:
  4897.         WORD    number of bytes of name following
  4898.         BYTEs    (8 max) uppercase name of shell batch file
  4899. --------V-2F1A00-----------------------------
  4900. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  4901.     AX = 1A00h
  4902. Return: AL = FFh if installed
  4903. Notes:    AVATAR.SYS also responds to this call
  4904.     documented for DOS 5+, but undocumented for DOS 4.x
  4905. --------V-2F1A00BX414E-----------------------
  4906. INT 2F - ANSIPLUS.SYS - INSTALLATION CHECK
  4907.     AX = 1A00h
  4908.     BX = 414Eh ('AN')
  4909.     CX = 5349h ('SI')
  4910.     DX = 2B2Bh ('++')
  4911. Return: AL = FFh if installed
  4912.         CF clear
  4913.         ES:BX -> INT 29 entry point
  4914. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  4915.       replaces the normal ANSI.SYS is a more powerful version with many
  4916.       additional features
  4917. Note:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  4918.       from the magic values above
  4919. --------V-2F1A00BX4156-----------------------
  4920. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  4921.     AX = 1A00h
  4922.     BX = 4156h ('AV')
  4923.     CX = 4154h ('AT')
  4924.     DX = 4152h ('AR')
  4925. Return: AL = FFh if installed
  4926.         CF clear
  4927.         BX = AVATAR protocol level supported
  4928.         CX = driver type
  4929.         0000h AVATAR.SYS
  4930.         4456h DVAVATAR.COM inside DESQview window
  4931.         DX = 0016h
  4932. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  4933.       interprets AVATAR command codes in the same way that ANSI interprets
  4934.       ANSI command codes
  4935. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  4936.       the magic values
  4937. --------V-2F1A01-----------------------------
  4938. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  4939.     AX = 1A01h
  4940.     CL = function
  4941.         7Fh for GET
  4942.         5Fh for SET
  4943.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  4944. Return: CF set on error
  4945.         AX = error code (many non-standard)
  4946.     CF clear if successful
  4947.         AX destroyed
  4948. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  4949. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  4950. --------V-2F1A02-----------------------------
  4951. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  4952.     AX = 1A02h
  4953.     DS:DX -> parameter block (see below)
  4954. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  4955. SeeAlso: AX=1A01h
  4956.  
  4957. Format of parameter block:
  4958. Offset    Size    Description
  4959.  00h    BYTE    subfunction
  4960.         00h set/reset interlock
  4961.         01h get /L flag
  4962.  01h    BYTE    interlock state
  4963.         00h=reset, 01h=set
  4964.           This interlock prevents some of the ANSI.SYS post-processing
  4965.           in its hook onto INT 10, AH=00h mode set
  4966.  02h    BYTE    (returned)
  4967.         00h if /L not in effect
  4968.         01h if /L in effect
  4969. --------V-2F1A21-----------------------------
  4970. INT 2F - AVATAR.SYS - SET DRIVER STATE
  4971.     AX = 1A21h (AL='!')
  4972.     DS:SI -> command string with one or more state characters
  4973.     CX = length of command string
  4974. Return: CF set on error (invalid subfunction)
  4975.     CF clear if successful
  4976. Note:    the characters in the state string are interpreted left to right, and
  4977.       need not be in any particular order
  4978. SeeAlso: AX=1A3Fh
  4979.  
  4980. Values for state characters:
  4981.  'a'    activate driver
  4982.  'd'    disable driver
  4983.  'f'    use fast screen output
  4984.  'g'    always convert gray keys (+ and -) to function keys
  4985.  'G'    never convert gray keys
  4986.  'l'    convert gray keys only when ScrollLock active
  4987.  's'    use slow screen output
  4988.  't'    Tandy 1000 keyboard (not yet implemented)
  4989. --------V-2F1A3C-----------------------------
  4990. INT 2F U - AVATAR.SYS v0.11 - ???
  4991.     AX = 1A3Ch
  4992.     ???
  4993. Return: CX = 0000h
  4994. --------V-2F1A3E-----------------------------
  4995. INT 2F U - AVATAR.SYS v0.11 - ???
  4996.     AX = 1A3Eh
  4997.     CL = ???
  4998.     CH = ???
  4999.     DL = ???
  5000.     DH = ???
  5001. Return: CL = ???
  5002.     CH = ???
  5003.     DL = ???
  5004.     DH = ???
  5005. --------V-2F1A3F-----------------------------
  5006. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  5007.     AX = 1A3Fh (AL='?')
  5008.     ES:DI -> buffer
  5009.     CX = length of buffer in bytes
  5010. Return: CF clear
  5011.     CX = actual size of returned info
  5012. Note:    the returned information consists of multiple letters whose meanings
  5013.       are described under AX=1A21h
  5014. SeeAlso: AX=1A21h
  5015. --------S-2F1A42BX4156-----------------------
  5016. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  5017.     AX = 1A42h
  5018.     BX = 4156h ('AV')
  5019.     ES:DI -> FAR handler for serial port using IRQ3
  5020.     DS = data segment needed by handler
  5021. Return: AX = 1A42h if ASD not installed
  5022.        = 0000h if no more room
  5023.        else handle to use when uninstalling
  5024. Notes:    the handler need not save/restore registers or signal EOI to the
  5025.       interrupt controller
  5026.     the handler should return AX=0000h if the interrupt was meant for it,
  5027.       and either leave AX unchanged or return a non-zero value otherwise
  5028.     the most recently installed handler will be called first, continuing
  5029.       to earlier handlers until one returns AX=0000h
  5030. SeeAlso: AX=1A43h,AX=1A62h
  5031. --------S-2F1A43BX4156-----------------------
  5032. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  5033.     AX = 1A43h
  5034.     BX = 4156h ('AV')
  5035.     ES:DI -> FAR handler for serial port using IRQ4
  5036.     DS = data segment needed by handler
  5037. Return: AX = 1A43h if ASD not installed
  5038.        = 0000h if no more room
  5039.        else handle to use when uninstalling
  5040. Notes:    (see AX=1A42h)
  5041. SeeAlso: AX=1A42h,AX=1A63h
  5042. --------V-2F1A44BX4156-----------------------
  5043. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  5044.     AX = 1A44h
  5045.     BX = 4156h ('AV')
  5046. Return: AX = 0000h
  5047.     DS = data segment
  5048.     CX = size of data segment
  5049. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  5050.       process under a multitasker hooks this function and provides a
  5051.       separate data segment, AVATAR.SYS becomes fully reentrant.
  5052. SeeAlso: AX=1A21h,AX=1A3Fh
  5053. --------V-2F1A52-----------------------------
  5054. INT 2F U - AVATAR.SYS v0.11 - GET ???
  5055.     AX = 1A52h
  5056.     CX = size of buffer
  5057.     ES:DI -> buffer
  5058. Return: ??? copied into user buffer
  5059. Note:    the maximum size of the data which may be copied is returned by
  5060.       AX=1A72h
  5061. SeeAlso: AX=1A72h
  5062. --------V-2F1A53-----------------------------
  5063. INT 2F U - AVATAR.SYS v0.11 - ???
  5064.     AX = 1A53h
  5065.     CL = ??? (00h-05h)
  5066.     ???
  5067. Return: ???
  5068. --------S-2F1A62BX4156-----------------------
  5069. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  5070.     AX = 1A62h
  5071.     BX = 4156h ('AV')
  5072.     CX = handle for IRQ routine returned by AX=1A42h
  5073. SeeAlso: AX=1A42h,AX=1A63h
  5074. --------S-2F1A63BX4156-----------------------
  5075. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  5076.     AX = 1A63h
  5077.     BX = 4156h ('AV')
  5078.     CX = handle for IRQ routine returned by AX=1A43h
  5079. SeeAlso: AX=1A43h,AX=1A62h
  5080. --------V-2F1A72-----------------------------
  5081. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  5082.     AX = 1A72h
  5083. Return: CX = maximum size of ???
  5084. SeeAlso: AX=1A52h
  5085. --------V-2F1A7B-----------------------------
  5086. INT 2F U - AVATAR.SYS v0.11 - ???
  5087.     AX = 1A7Bh
  5088. Return: AX = 0000h
  5089.     CX = 0000h
  5090. --------V-2F1A7D-----------------------------
  5091. INT 2F U - AVATAR.SYS v0.11 - ???
  5092.     AX = 1A7Dh
  5093. Return: AX = ???
  5094. --------V-2F1AADDX0000-----------------------
  5095. INT 2F U - AVATAR.SYS v0.11 - ???
  5096.     AX = 1AADh
  5097.     DX = 0000h
  5098.     CX = subfunction (00h-0Ch)
  5099.     ???
  5100. Return: AX = 0000h if DX was nonzero
  5101.     ???
  5102. --------m-2F1B00-----------------------------
  5103. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  5104.     AX = 1B00h
  5105. Return: AL = FFh if installed
  5106. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  5107.     This extension hooks onto INT 67/AH=58h and returns from that call data
  5108.       which excludes the physical pages being used by DOS.
  5109. SeeAlso: AH=1Bh"FRAME INFO"
  5110. --------m-2F1B-------------------------------
  5111. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  5112.     AH = 1Bh
  5113.     AL <> 00h
  5114.     DI = hidden physical page number
  5115. Return: AX = FFFFh if failed (no such hidden page)
  5116.     AX = 0000h if OK, then
  5117.          ES = segment of page frame
  5118.          DI = physical page number
  5119. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  5120.     FASTOPEN makes this call with AL = FFh
  5121. SeeAlso: AX=1B00h
  5122. --------V-2F2300-----------------------------
  5123. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  5124.     AX = 2300h
  5125. Return: AH = FFh
  5126. Note:    this installation check does not follow the usual format
  5127. SeeAlso: AH=23h
  5128. --------V-2F23-------------------------------
  5129. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  5130.     AH = 23h
  5131.     AL nonzero
  5132. Return: AH = FFh
  5133.     ES:BX -> graphics data
  5134. SeeAlso: AX=2300h
  5135. --------T-2F2700-----------------------------
  5136. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  5137.     AX = 2700h
  5138. Return: AL = 00h not installed
  5139.        = FFh installed
  5140. --------T-2F2701-----------------------------
  5141. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  5142.     AX = 2701h
  5143. Return: AX = maximum simultaneous tasks
  5144.     BX = index into TASK_IDS of current foreground task
  5145.     CX = currently-active tasks
  5146.     DX = version number (DR-DOS 6.0 = 0001h)
  5147.     ES:SI -> TASK_IDS
  5148.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  5149. Notes:    do not attempt to create a new task if CX == AX
  5150.     the task's index is its position on the task menu, while its ID is the
  5151.       position within the internal task name table
  5152. SeeAlso: AX=2714h,AX=2716h
  5153. --------T-2F2702-----------------------------
  5154. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  5155.     AX = 2702h
  5156. Return: DX = maximum pages INT 67/AH=42h will report available
  5157. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  5158.       amount which is reported as being available at a given time
  5159. SeeAlso: AX=2703h,INT 67/AH=42h
  5160. --------T-2F2703-----------------------------
  5161. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  5162.     AX = 2703h
  5163.     DX = maximum pages INT 67/AH=42h should report available
  5164. Return: DX = new maximum for reporting
  5165. SeeAlso: AX=2702h,INT 67/AH=42h
  5166. --------T-2F2704-----------------------------
  5167. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  5168.     AX = 2704h
  5169.     DL = subfunction
  5170.         00h unregister task manager
  5171.         01h register task manager
  5172. Return: DL = status
  5173.         00h registered
  5174.         01h unregistered
  5175. Notes:    a task manager replaces TaskMAX's menu system with its own user
  5176.       interface; while one is registered, the TaskMAX hotkeys and
  5177.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  5178.     unregister the task manager before terminating it
  5179. SeeAlso: AX=2705h
  5180. Index:    hotkeys;TaskMAX
  5181. --------T-2F2705-----------------------------
  5182. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  5183.     AX = 2705h
  5184.     DL = subfunction
  5185.         00h disable keystrokes for switching to next/prev/specified task
  5186.         01h enable
  5187. Return: nothing
  5188. Note:    should only be called by a registered task manager (see AX=2704h)
  5189. SeeAlso: AX=2704h,AX=2706h
  5190. --------T-2F2706-----------------------------
  5191. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  5192.     AX = 2706h
  5193.     DX = task index (see AX=2701h) of task to be activated
  5194. Return: DX = task index of previously-active task
  5195. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  5196. --------T-2F2707-----------------------------
  5197. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  5198.     AX = 2707h
  5199.     DS:DX -> ASCIZ pathname of executable
  5200.     ES:BX -> parameter block (see below)
  5201.     CX = number of ticks before automatic return to task manager
  5202.         (0000h = run until termination or explicitly switched)
  5203. Return: DX = new task's task index (FFFFh if task terminated)
  5204. SeeAlso: AX=2706h,AX=2708h
  5205.  
  5206. Format of parameter block:
  5207. Offset    Size    Description
  5208.  00h    WORD    reserved, should be 0000h
  5209.  02h    DWORD    pointer to command tail to be copied into child's PSP
  5210.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  5211.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  5212. --------T-2F2708-----------------------------
  5213. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  5214.     AX = 2708h
  5215.     DX = task index
  5216. Return: DX = FFFFh (task deleted)
  5217. Notes:    this call should only be used for abnormal task termination, after
  5218.       first checking for open files with AX=270Ch; should not be used
  5219.       with programs that allocate EMS or XMS memory
  5220.     switches to specified task first
  5221. SeeAlso: AX=2707h
  5222. --------T-2F2709-----------------------------
  5223. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  5224.     AX = 2709h
  5225.     DX = task index
  5226.     DS:SI -> 8-byte name (8 NULs = remove name)
  5227. Return: AL = task flags
  5228.         00h ID unused or task terminated
  5229.         01h ID in use, task name table entry valid
  5230.         81h ID in use, task name fixed
  5231.     BX = task ID
  5232.     ES:DI -> name in task name table (see AX=2701h)
  5233. Note:    the task retains the given name until it terminates or the name is
  5234.       removed by specifying a name of 8 NULs.
  5235. SeeAlso: AX=2701h,AX=2707h
  5236. --------T-2F270A-----------------------------
  5237. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  5238.     AX = 270Ah
  5239.     DX = task index
  5240. Return: DX = task ID (FFFFh if index invalid)
  5241. Note:    task IDs stay constant, while indexes can change when other tasks are
  5242.       deleted
  5243. SeeAlso: AX=2701h,AX=270Bh
  5244. --------T-2F270B-----------------------------
  5245. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  5246.     AX = 270Bh
  5247.     DX = task ID
  5248. Return: DX = task index (FFFFh if task not active)
  5249. SeeAlso: AX=270Ah
  5250. --------T-2F270C-----------------------------
  5251. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  5252.     AX = 270Ch
  5253.     DX = task index
  5254. Return: AX = number of files currently open for specified task
  5255. SeeAlso: AX=2708h
  5256. --------T-2F270D-----------------------------
  5257. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  5258.     AX = 270Dh
  5259.     DX = task index
  5260. Return: DX = status
  5261.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  5262.         0001h if not in root shell for task
  5263. Note:    TaskMAX will return 0001h if the specified task has spawned another
  5264.       command interpreter with AX=2707h
  5265. SeeAlso: AX=2707h,AX=270Ch
  5266. --------T-2F270E-----------------------------
  5267. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  5268.     AX = 270Eh
  5269.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5270.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5271. Return: ES:DI -> current lead-in string
  5272. Note:    the specified sequence of keystrokes is sent to the application before
  5273.       every line of a text-mode spreadsheet paste
  5274. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  5275. --------T-2F270F-----------------------------
  5276. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  5277.     AX = 270Fh
  5278.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5279.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5280. Return: ES:DI -> current lead-in string
  5281. Note:    the specified sequence of keystrokes is sent to the application before
  5282.       every number in a numeric-mode spreadsheet paste
  5283. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  5284. --------T-2F2710-----------------------------
  5285. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  5286.     AX = 2710h
  5287.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5288.     DS:SI -> pasting terminator string (character/scan-code pairs)
  5289. Return: ES:DI -> current terminator string
  5290. Note:    the specified sequence of keystrokes is sent to the application after
  5291.       every line of a spreadsheet paste operation
  5292. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  5293. --------T-2F2711-----------------------------
  5294. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  5295.     AX = 2711h
  5296.     DX = ASCII code for separator (FFFFh to get current)
  5297. Return: DL = current separator character
  5298. SeeAlso: AX=270Fh
  5299. --------T-2F2712-----------------------------
  5300. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  5301.     AX = 2712h
  5302.     DX = task index
  5303. --------T-2F2713-----------------------------
  5304. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  5305.     AX = 2713h
  5306.     DX = task index
  5307.     CX = paste mode
  5308.         0000h alphanumeric
  5309.         0001h numeric
  5310.         0002h text
  5311. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  5312. --------T-2F2714-----------------------------
  5313. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  5314.     AX = 2714h
  5315. Return: CX = total KB of swap space
  5316.     DX = available KB of swap space
  5317. SeeAlso: AX=2701h
  5318. --------T-2F2715-----------------------------
  5319. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  5320.     AX = 2715h
  5321. Return: only after calling task is again selected
  5322. SeeAlso: AX=2706h
  5323. --------T-2F2716-----------------------------
  5324. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  5325.     AX = 2716h
  5326. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  5327.         CX = bytes in paste buffer
  5328.         DX = current generation number (updated after every copy operation)
  5329. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  5330. --------T-2F2717-----------------------------
  5331. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  5332.     AX = 2717h
  5333.     CX = bytes in destination buffer
  5334.     ES:DI -> destination buffer
  5335. Return: AX = 0000h if function supported
  5336.         CX = bytes actually copied (FFFFh if buffer too small)
  5337.         DX = current generation number for paste buffer
  5338. Note:    the destination buffer may be too small if another task adds more data
  5339.       to the paste buffer after the AX=2716h call but before this call
  5340. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  5341. --------T-2F2718-----------------------------
  5342. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  5343.     AX = 2718h
  5344.     CX = bytes in source buffer
  5345.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  5346. Return: AX = 0000h if function supported
  5347.         CX = bytes actually copied
  5348.         DX = current generation number for paste buffer
  5349. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  5350. --------F-2F2A-------------------------------
  5351. INT 2F - Gammafax DOS Dispatcher INTERFACE
  5352.     AH = 2Ah
  5353. Note:    details not available at this time
  5354. SeeAlso: AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB00h,AX=CBDDh,INT 66"BitFax"
  5355. --------t-2F3900-----------------------------
  5356. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  5357.     AX = 3900h
  5358. Return: AL = status
  5359.         00h not installed
  5360.         FFh one or more TSRs using this interface is installed
  5361.         DX may be destroyed
  5362. Note:    this function is provided to that the multiplex number will appear used
  5363.       to other programs
  5364. SeeAlso: AH=39h/BL=00h
  5365. --------t-2F39--BL00-------------------------
  5366. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  5367.     AH = 39h
  5368.     BL = 00h
  5369.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see below)
  5370. Return: AL = status
  5371.         00h not installed
  5372.         FFh installed
  5373.         DX = segment address of resident module
  5374. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  5375.       resident module is installed by allocating a block of upper memory,
  5376.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  5377.       field with the TSR's name.
  5378. SeeAlso: AX=3900h,AH=39h/BL=01h
  5379.  
  5380. Values for TSR ID number:
  5381.  01h    TSR Windows
  5382.  02h    NOBUSY
  5383.  03h    CD STACK
  5384.  04h    DISK WATCH
  5385.  05h    PUSHBP
  5386.  06h    ALIAS
  5387.  07h    KEYMACRO
  5388.  08h    SLOWDOWN
  5389.  09h    ANSIGRAB
  5390.  0Ah    TEE
  5391.  0Bh    FASTMOUS
  5392.  0Ch    EXTWILD
  5393.  0Dh    BREAKOUT
  5394.  0Eh    STOPDISK
  5395.  0Fh    MEMINIT
  5396.  10h    JANUSEXT
  5397.  11h    CAPS
  5398.  12h    ANSI
  5399.  13h    TRAPPER
  5400.  14h    EATMEM
  5401.  15h    WPJOKE
  5402.  16h    SHOWDOS
  5403.  17h    LOGINTS
  5404.  18h    BLANKVGA
  5405.  19h    SWAPEXEC
  5406.  1Ah    SHELL
  5407.  1Bh    TSRGAMES
  5408.  
  5409. Format of TSR modules:
  5410. Offset    Size    Description
  5411.  00h  4 BYTEs    signature "FTSR"
  5412.  04h    WORD    segment address of this module (used to check validity)
  5413.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  5414.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  5415.         (usually only a PSP if file access is required)
  5416.      5N BYTEs    interrupt list (see below)
  5417.     BYTE    FFh terminator
  5418.  
  5419. Format of interrupt list entry:
  5420. Offset    Size    Description
  5421.  00h    BYTE    interrupt number (00h-FEh)
  5422.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  5423.  03h    WORD    offset within segment of begin of interrupt handler code
  5424. --------t-2F39--BL01-------------------------
  5425. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  5426.     AH = 39h
  5427.     BL = 01h
  5428.     AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h)
  5429. Return: AL = status
  5430.         00h not ready to be removed
  5431.         FFh resident module may be removed by deassigning the interrupts
  5432.         hooked by the TSR and deallocating the TSR's memory block
  5433.     AH,BX,CX,DX,ES may be destroyed
  5434. SeeAlso: AX=3900h,AH=39h/BL=00h
  5435. --------t-2F39-------------------------------
  5436. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  5437.     AH = 39h
  5438.     BL = function number (02h-FFh)
  5439.     AL = TSR ID number (01h-FFh)
  5440.     CX,DX,SI,DI,DS,ES may contain parameters
  5441.     BH reserved for use by the function dispatcher
  5442. Return: as appropriate for the called function
  5443. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  5444. --------r-2F3901BL02-------------------------
  5445. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  5446.     AX = 3901h
  5447.     BL = 02h
  5448. Return: AX = error code (0000h if successful)
  5449.     SI,DI,DS,ES preserved
  5450. Notes:    opens the next TSR window on top of any others.     Only three
  5451.       TSR windows can be opened at any one time.  The three windows
  5452.       are all 40x11 characters, partly overlapping.
  5453. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  5454. --------r-2F3901BL03-------------------------
  5455. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  5456.     AX = 3901h
  5457.     BL = 03h
  5458. Return: AX = error code (0000h if successful)
  5459.     SI,DI,DS,ES preserved
  5460. Notes:    Hide any visible TSR windows from view.
  5461. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  5462. --------r-2F3901BL04-------------------------
  5463. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  5464.     AX = 3901h
  5465.     BL = 04h
  5466. Return: AX = error code (0000h if successful)
  5467.     SI,DI,DS,ES preserved
  5468. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  5469. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  5470. --------r-2F3901BL05-------------------------
  5471. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  5472.     AX = 3901h
  5473.     BL = 05h
  5474. Return: AX = error code (0000h if successful)
  5475.     SI,DI,DS,ES preserved
  5476. Notes:    Close the last opened TSR window.
  5477. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5478. --------r-2F3901BL06-------------------------
  5479. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  5480.     AX = 3901h
  5481.     BL = 06h
  5482.     DS:SI -> title string
  5483. Return: AX = error code (0000h if successful)
  5484.     SI,DI,DS,ES preserved
  5485. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5486. --------r-2F3901BL07-------------------------
  5487. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  5488.     AX = 3901h
  5489.     BL = 07h
  5490.     CH = Y coordinate (0-10)
  5491.     CL = X coordinate (0-39)
  5492. Return: AX = error code (0000h if successful)
  5493.     SI,DI,DS,ES preserved
  5494. Note:    the hardware cursor is always disabled when a TSR window is opened;
  5495.       this call only sets a text position
  5496. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  5497. --------r-2F3901BL08-------------------------
  5498. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  5499.     AX = 3901h
  5500.     BL = 08h
  5501.     DS:SI -> string
  5502. Return: AX = error code (0000h if successful)
  5503.     SI,DI,DS,ES preserved
  5504. Notes:    The text is not clipped.
  5505.     This routine understands Tab, NewLine and Carriage Return
  5506. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5507. --------r-2F3901BL09-------------------------
  5508. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  5509.     AX = 3901h
  5510.     BL = 09h
  5511.     CL = scroll direction: 01h up, FFh down, 00h clear window
  5512. Return: AX = error code (0000h if successful)
  5513.     SI,DI,DS,ES preserved
  5514. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5515. --------r-2F3901BL0A-------------------------
  5516. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  5517.     AX = 3901h
  5518.     BL = 0Ah
  5519.     DX = sound divisor, or 0 for silence.
  5520.          (divide 1843200 by required frequency to get value for DX)
  5521.     CL = sound length in 18.2 Hz clock ticks
  5522. Return: AX = error code (0000h if successful)
  5523.     SI,DI,DS,ES preserved
  5524. SeeAlso: AH=39h/BL=00h
  5525. --------r-2F3901BL0B-------------------------
  5526. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  5527.     AX = 3901h
  5528.     BL = 0Bh
  5529.     CL = number of users increment: +1 if adding a new user
  5530.                     -1 if removing a user
  5531. Return: AX = error code (0000h if successful)
  5532.     SI,DI,DS,ES preserved
  5533. Note:    the TSR windows resident module may only be removed when the internal
  5534.       user count is zero
  5535. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5536. --------V-2F3912BL03-------------------------
  5537. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  5538.     AX = 3912h
  5539.     BL = 03h
  5540.     CL = new mode (00h fast, FFh BIOS)
  5541. Return: AL = old compatibility mode
  5542.     SI,DI,DS,ES preserved
  5543. SeeAlso: AX=3900h,AX=3912h/BL=04h
  5544. --------V-2F3912BL04-------------------------
  5545. INT 2F - Kingswood ANSI display driver - SET FLAGS
  5546.     AX = 3912h
  5547.     BL = 04h
  5548.     CL = new flags
  5549.         bit 0: do not wrap at end of line
  5550.         bit 1: wait for beeps to end before displaying next character
  5551.         bit 2: do not use graphics cursor
  5552. Return: AL = old flags
  5553.     SI,DI,DS,ES preserved
  5554. SeeAlso: AX=3900h,AX=3912h/BL=03h
  5555. --------W-2F4000-----------------------------
  5556. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  5557.     AX = 4000h
  5558. Return: AL = 01h does not virtualize video access
  5559.          02h virtualizes the video when in text mode
  5560.          03h virtualizes the video when in text mode or single plane
  5561.          graphics modes
  5562.          04h virtualizes the video when in text mode, single plane
  5563.          graphics modes, and VGA multiplane modes
  5564.          FFh virtualizes the video fully
  5565. Note:    this function is used by display drivers to find out what capabilities
  5566.       exist for the VDD driver and also trigger the VDD driver to call
  5567.       functions 4005h and 4006h.  This function also gives the Video Driver
  5568.       hardware access to the video registers.
  5569. --------O-2F4001-----------------------------
  5570. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  5571.     AX = 4001h
  5572. Note:    called by OS/2 when the DOS box is about to be placed in the background
  5573.       and the video driver should save any necessary state
  5574. SeeAlso: AX=4002h,AX=4005h
  5575. --------O-2F4002-----------------------------
  5576. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  5577.     AX = 4002h
  5578. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  5579.       and the video driver should restore the previously-saved state
  5580. SeeAlso: AX=4001h,AX=4006h
  5581. --------W-2F4003-----------------------------
  5582. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  5583.     AX = 4003h
  5584. Note:    This critical section must be exited within 1 second.
  5585. SeeAlso: AX=4004h
  5586. --------W-2F4004-----------------------------
  5587. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  5588.     AX = 4004h
  5589. SeeAlso: AX=4003h
  5590. --------W-2F4005-----------------------------
  5591. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  5592.     AX = 4005h
  5593. Note:    called by Windows when the DOS box is about to be placed in the
  5594.       background and the video driver should save any necessary state
  5595.       information (this may be called only in Standard mode)
  5596. SeeAlso: AX=4001h,AX=4006h
  5597. --------W-2F4006-----------------------------
  5598. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  5599.     AX = 4006h
  5600. Note:    called by Windows when the DOS box is about to be placed in the
  5601.       foreground and the video driver should restore any necessary state
  5602.       information (this may be called only in Standard mode)
  5603. SeeAlso: AX=4002h,AX=4005h
  5604. --------W-2F4007-----------------------------
  5605. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  5606.     AX = 4007h
  5607. Note:    used by Windows Standard mode
  5608. --------E-2F4040-----------------------------
  5609. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  5610.     AX = 4040h
  5611. Return: BX:CX -> ???
  5612. --------N-2F4100-----------------------------
  5613. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  5614.     AX = 4100h
  5615. Return: CF clear if successful
  5616.         AL = FFh
  5617.     CF set on error
  5618.         AX = ???
  5619. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  5620.     LAN Manager enhanced mode adds features beyond the standard redirector
  5621.       file/printer services
  5622. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  5623. --------N-2F4103-----------------------------
  5624. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5625.     AX = 4103h
  5626. Return: ???
  5627. SeeAlso: AX=4100h,AX=4104h
  5628. --------N-2F4104-----------------------------
  5629. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5630.     AX = 4104h
  5631. Return: ???
  5632. SeeAlso: AX=4100h,AX=4103h
  5633. --------N-2F42-------------------------------
  5634. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  5635.     AH = 42h
  5636.     ???
  5637. Return: ???
  5638. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5639.       file/printer services
  5640. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  5641. --------m-2F4300-----------------------------
  5642. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  5643.     AX = 4300h
  5644. Return: AL = 80h XMS driver installed
  5645.     AL <> 80h no driver
  5646. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  5647.       above 640K
  5648.     this installation check DOES NOT follow the format used by other
  5649.       software
  5650. SeeAlso: AX=4310h
  5651. Index:    installation check;XMS version 2+
  5652. --------m-2F4308-----------------------------
  5653. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  5654.     AX = 4308h
  5655. Return: AL = 43h if supported
  5656.         BL = A20 handler number (value of /MACHINE:nn switch)
  5657.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  5658. SeeAlso: AX=4309h,AX=4330h
  5659. --------m-2F4309-----------------------------
  5660. INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
  5661.     AX = 4309h
  5662. Return: AL = 43h if function supported
  5663.         ES:BX -> XMS handle table (see below)
  5664. Note:    HIMEM.SYS v3.09 is part of MS-DOS 6.0.
  5665. SeeAlso: AX=4308h
  5666.  
  5667. Format of XMS handle table:
  5668. Offset    Size    Description
  5669.  00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
  5670.  01h    BYTE    size of one handle??? (0Ah in HIMEM.SYS v3.09)
  5671.  02h    WORD    value of /numhandles= parameter (default = 20h)
  5672.  04h    DWORD    pointer to XMS handle array (see below)
  5673.  
  5674. Format of XMS handle [array]:
  5675. Offset    Size    Description
  5676.  00h    BYTE    flag 01h=free, 02h=used, 04h=unused
  5677.  01h    BYTE    lock count (00h=unlocked)
  5678.  02h    DWORD    address of XMS block in KB (shift left by 10 for abs. address)
  5679.  06h    DWORD    size of XMS block in KB
  5680. --------m-2F4310-----------------------------
  5681. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  5682.     AX = 4310h
  5683. Return: ES:BX -> driver entry point
  5684. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  5685. SeeAlso: AX=4300h
  5686.  
  5687. Perform a FAR call to the driver entry point with AH set to the function code
  5688.     AH    function
  5689.     00h  Get XMS version number
  5690.          Return: AX = XMS version (in BCD, AH=major, AL=minor)
  5691.              BX = internal revision number
  5692.              DX = 0001h if HMA (1M to 1M + 64K) exists
  5693.               0000h if HMA does not exist
  5694.     01h  Request High Memory Area (1M to 1M + 64K)
  5695.          DX = memory in bytes (for TSR or device drivers)
  5696.           FFFFh if application program
  5697.          Return: AX = 0001h success
  5698.             = 0000h failure
  5699.                BL = error code (80h,81h,90h,91h,92h) (see below)
  5700.     02h  Release High Memory Area
  5701.          Return: AX = 0001h success
  5702.             = 0000h failure
  5703.                BL = error code (80h,81h,90h,93h) (see below)
  5704.     03h  Global enable A20, for using the HMA
  5705.          Return: AX = 0001h success
  5706.             = 0000h failure
  5707.                BL = error code (80h,81h,82h) (see below)
  5708.     04h  Global disable A20
  5709.          Return: AX = 0001h success
  5710.             = 0000h failure
  5711.                BL = error code (80h,81h,82h,94h) (see below)
  5712.     05h  Local enable A20, for direct access to extended memory
  5713.          Return: AX = 0001h success
  5714.             = 0000h failure
  5715.                BL = error code (80h,81h,82h) (see below)
  5716.     06h  Local disable A20
  5717.          Return: AX = 0001h success
  5718.             = 0000h failure
  5719.                BL = error code (80h,81h,82h,94h) (see below)
  5720.     07h  Query A20 state
  5721.          Return: AX = 0001h enabled
  5722.             = 0000h disabled
  5723.              BL = error code (00h,80h,81h) (see below)
  5724.     08h  Query free extended memory, not counting HMA
  5725.          BL = 00h (some implementations leave BL unchanged on success)
  5726.          Return: AX = size of largest extended memory block in KB
  5727.              DX = total extended memory in KB
  5728.              BL = error code (00h,80h,81h,A0h) (see below)
  5729.     09h  Allocate extended memory block
  5730.          DX = Kbytes needed
  5731.          Return: AX = 0001h success
  5732.                DX = handle for memory block
  5733.             = 0000h failure
  5734.                BL = error code (80h,81h,A0h) (see below)
  5735.     0Ah  Free extended memory block
  5736.          DX = handle of block to free
  5737.          Return: AX = 0001h success
  5738.             = 0000h failure
  5739.                BL = error code (80h,81h,A2h,ABh) (see below)
  5740.     0Bh  Move extended memory block
  5741.          DS:SI -> EMM structure (see below)
  5742.          Note: if either handle is 0000h, the corresponding offset is
  5743.            considered to be an absolute segment:offset address in
  5744.            directly addressable memory
  5745.          Return: AX = 0001h success
  5746.             = 0000h failure
  5747.                BL = error code (80h-82h,A3h-A9h) (see below)
  5748.     0Ch  Lock extended memory block
  5749.          DX = handle of block to lock
  5750.          Return: AX = 0001h success
  5751.                DX:BX = 32-bit linear address of locked block
  5752.             = 0000h failure
  5753.                BL = error code (80h,81h,A2h,ACh,ADh) (see below)
  5754.          Note: MS Windows 3.x rejects this function for handles allocated
  5755.             after Windows started
  5756.     0Dh  Unlock extended memory block
  5757.          DX = handle of block to unlock
  5758.          Return: AX = 0001h success
  5759.             = 0000h failure
  5760.                BL = error code (80h,81h,A2h,AAh) (see below)
  5761.     0Eh  Get handle information
  5762.          DX = handle for which to get info
  5763.          Return: AX = 0001h success
  5764.                BH = block's lock count
  5765.                BL = number of free handles left
  5766.                DX = block size in KB
  5767.             = 0000h failure
  5768.                BL = error code (80h,81h,A2h) (see below)
  5769.          BUG: MS Windows 3.10 acts as though unallocated handles are in use
  5770.          Note: MS Windows 3.00 has problems with this call
  5771.     0Fh  Reallocate extended memory block
  5772.          DX = handle of block
  5773.          BX = new size of block in KB
  5774.          Return: AX = 0001h success
  5775.             = 0000h failure
  5776.                BL = error code (80h,81h,A0h-A2h,ABh) (see below)
  5777.     10h  Request upper memory block (nonEMS memory above 640K)
  5778.          DX = size of block in paragraphs
  5779.          Return: AX = 0001h success
  5780.                BX = segment address of UMB
  5781.                DX = actual size of block
  5782.             = 0000h failure
  5783.                BL = error code (80h,B0h,B1h) (see below)
  5784.                DX = largest available block
  5785.     11h  Release upper memory block
  5786.          DX = segment address of UMB to release
  5787.          Return: AX = 0001h success
  5788.             = 0000h failure
  5789.                BL = error code (80h,B2h) (see below)
  5790.     12h  (XMS v3.0) Reallocate upper memory block
  5791.          DX = segment address of UMB to resize
  5792.          BX = new size of block in paragraphs
  5793.          Return: AX = 0001h success
  5794.             = 0000h failure
  5795.                BL = error code (80h,B0h,B2h) (see below)
  5796.                DX = maximum available size (RM386)
  5797.     34h  (QEMM 5.11 only, undocumented) ???
  5798.     44h  (QEMM 5.11 only, undocumented) ???
  5799.     80h  (Netroom RM386 v6.00) Reallocate upper memory block
  5800.          this function is identical to function 12h
  5801.     81h  (Netroom RM386 v6.00) re-enable HMA allocation
  5802.          Return: AX = 0001h (success)
  5803.     82h  (Netroom RM386 v6.00) Cloaking API
  5804.          DX = XMS handle of block containing protected-mode code
  5805.          CL = code size (00h 16-bit, else 32-bit)
  5806.          ESI, EDI = parameters to pass to protected-mode code
  5807.          Return: AX = status
  5808.              0001h success
  5809.              0000h failed
  5810.                  BL = error code (A2h,B0h) (see below)
  5811.          Note: this calls offset 0 in the XMS memory block with
  5812.         EBX = physical address of block's start
  5813.         CS = code selector for XMS block at EBX (16-bit or 32-bit)
  5814.         DS = data selector for XMS block, starting at EBX
  5815.         ES = selector for V86 memory access to full real-mode 1088K
  5816.         GS = selector for full flat address space
  5817.         ESI, EDI from V86 mode
  5818.     83h  (Netroom RM386 v6.00) Create new UMB entry
  5819.          BX = segment of high-memory block
  5820.          DX = first page of start of block
  5821.          CX = number of consecutive pages in block
  5822.          DI = start of UMB in block
  5823.          Return: AX = 0001h (success)
  5824.              DI = segment of first high-DOS block
  5825.          Note: the new UMB is not linked into the high-memory chain
  5826.     84h  (Netroom RM386 v6.00) Get all XMS handles info
  5827.          CX = size of buffer for handle info
  5828.          ES:DI -> buffer for handle info (see below)
  5829.          Return: AX = 0001h (success)
  5830.              DX = current number of allocated XMS handles
  5831.     88h  (XMS v3.0) Query free extended memory
  5832.          Return: EAX = largest block of extended memory, in KB
  5833.              BL = status
  5834.              00h success
  5835.              80h not implemented (i.e. on a 286 system)
  5836.              81h VDISK detected
  5837.              A0h all extended memory allocated
  5838.              ECX = physical address of highest byte of memory
  5839.                 (valid even on error codes 81h and A0h)
  5840.              EDX = total Kbytes of extended memory (0 if status A0h)
  5841.     89h  (XMS v3.0) Allocate any extended memory
  5842.          EDX = Kbytes needed
  5843.          Return: AX = 0001h success
  5844.                 DX = handle for allocated block (free with AH=0Ah)
  5845.             = 0000h failure
  5846.                 BL = status (80h,81h,A0h,A1h,A2h) (see below)
  5847.     8Eh  (XMS v3.0) Get extended EMB handle information
  5848.          DX = handle
  5849.          Return: AX = 0001h success
  5850.                 BH = block's lock count
  5851.                 CX = number of free handles left
  5852.                 EDX = block size in KB
  5853.             = 0000h failure
  5854.                 BL = status (80h,81h,A2h) (see below)
  5855.          BUG: DOS 6.0 HIMEM.SYS leaves CX unchanged
  5856.     8Fh  (XMS v3.0) Reallocate any extended memory block
  5857.          DX = unlocked handle
  5858.          EBX = new size in KB
  5859.          Return: AX = 0001h success
  5860.             = 0000h failure
  5861.                 BL = status (80h,81h,A0h-A2h,ABh) (see below)
  5862. Notes:    HIMEM.SYS requires at least 256 bytes free stack space
  5863.     the XMS driver need not implement functions 10h through 12h to be
  5864.       considered compliant with the standard
  5865. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  5866.       are called
  5867.  
  5868. Error codes returned in BL:
  5869.  00h    successful
  5870.  80h    function not implemented
  5871.  81h    Vdisk was detected
  5872.  82h    an A20 error occurred
  5873.  8Eh    a general driver error
  5874.  8Fh    unrecoverable driver error
  5875.  90h    HMA does not exist
  5876.  91h    HMA is already in use
  5877.  92h    DX is less than the /HMAMIN= parameter
  5878.  93h    HMA is not allocated
  5879.  94h    A20 line still enabled
  5880.  A0h    all extended memory is allocated
  5881.  A1h    all available extended memory handles are allocated
  5882.  A2h    invalid handle
  5883.  A3h    source handle is invalid
  5884.  A4h    source offset is invalid
  5885.  A5h    destination handle is invalid
  5886.  A6h    destination offset is invalid
  5887.  A7h    length is invalid
  5888.  A8h    move has an invalid overlap
  5889.  A9h    parity error occurred
  5890.  AAh    block is not locked
  5891.  ABh    block is locked
  5892.  ACh    block lock count overflowed
  5893.  ADh    lock failed
  5894.  B0h    only a smaller UMB is available
  5895.  B1h    no UMB's are available
  5896.  B2h    UMB segment number is invalid
  5897.  
  5898. Format of EMM structure:
  5899. Offset    Size    Description
  5900.  00h    DWORD    number of bytes to move (must be even)
  5901.  04h    WORD    source handle
  5902.  06h    DWORD    offset into source block
  5903.  0Ah    WORD    destination handle
  5904.  0Ch    DWORD    offset into destination block
  5905. Notes:    if source and destination overlap, only forward moves (source base
  5906.       less than destination base) are guaranteed to work properly
  5907.     if either handle is zero, the corresponding offset is interpreted
  5908.       as a real-mode address referring to memory directly addressable
  5909.       by the processor
  5910.  
  5911. Format of XMS handle info [array]:
  5912. Offset    Size    Description
  5913.  00h    BYTE    handle
  5914.  01h    BYTE    lock count
  5915.  02h    DWORD    handle size
  5916.  06h    DWORD    handle physical address (only valid if lock count nonzero)
  5917. --------m-2F4320-----------------------------
  5918. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  5919.     AX = 4320h
  5920.     ???
  5921. Return: ???
  5922. --------m-2F4330-----------------------------
  5923. INT 2F UC - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  5924.     AX = 4330h
  5925. Return: AL = 80h if external A20 handler provided
  5926.         ES:BX -> external A20 handler
  5927.         CL = ???
  5928. Note:    HIMEM.SYS calls this function to allow an external program to provide
  5929.       an A20 handler (i.e. to support a machine not supported by HIMEM
  5930.       itself)
  5931.  
  5932. External A20 handler called with:
  5933.     AX = function
  5934.         0000h disable A20
  5935.         0001h enable A20
  5936.     Return: AX = status
  5937.             0000h failure
  5938.             0001h successful
  5939. SeeAlso: AX=4308h,AX=4310h
  5940. --------E-2F43E0-----------------------------
  5941. INT 2F - Novell DOS Protected Mode Services (DPMS) - INSTALLATION CHECK
  5942.     AX = 43E0h
  5943. Return: AX = 0000h if installed
  5944.         ES:BX -> registration structure (see below)
  5945. Note:    this specification is still in beta
  5946. SeeAlso: INT 2F/AX=1687h
  5947.  
  5948. Format of registration structure:
  5949. Offset    Size    Description
  5950.  00h    DWORD    real-mode API entry point
  5951.  04h    DWORD    16-bit protected-mode API entry point
  5952.  08h  8 BYTEs    reserved (0)
  5953.  10h  8 BYTEs    blank-padded server OEM name
  5954.  18h    WORD    flags
  5955.         bit 0: fast processor reset available (286 only)
  5956.         bits 1-15 reserved (undefined)
  5957.  1Ah  2 BYTEs    DPMS version (major,minor)
  5958.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  5959.  
  5960. Call DPMS entry point with:
  5961.     AX = 0100h call protected-mode procedure
  5962.         CX = number of words of stack to copy
  5963.         ES:DI -> callup/down register structure (see below)
  5964.         Return: CF clear if successful
  5965.             CF set on error
  5966.                 AX = error code (see below)
  5967.     AX = 0101h call real-mode procedure (RETF return)
  5968.         CX = number of words of stack to copy
  5969.         ES:DI -> callup/down register structure (see below)
  5970.         Return: CF clear if successful
  5971.             CF set on error
  5972.                 AX = error code (see below)
  5973.     AX = 0102h call real-mode procedure (IRET return)
  5974.         CX = number of words of stack to copy
  5975.         ES:DI -> callup/down register structure (see below)
  5976.         Return: CF clear if successful
  5977.             CF set on error
  5978.                 AX = error code (see below)
  5979.     AX = 0103h call real-mode interrupt handler
  5980.         BL = interrupt number
  5981.         CX = number of words of stack to copy
  5982.         ES:DI -> callup/down register structure (see below)
  5983.         Return: CF clear if successful
  5984.             CF set on error
  5985.                 AX = error code (see below)
  5986.     AX = 0200h allocate descriptors
  5987.         CX = number of descriptors to allocate
  5988.         Return: CF clear if successful
  5989.                 AX = first descriptor allocated
  5990.             CF set on error
  5991.                 AX = error code (see below)
  5992.     AX = 0201h free a descriptor
  5993.         BX = descriptor
  5994.         Return: CF clear if successful
  5995.             CF set on error
  5996.                 AX = error code (see below)
  5997.     AX = 0202h create alias descriptor
  5998.         BX = descriptor
  5999.         Return: CF clear if successful
  6000.                 AX = alias descriptor
  6001.             CF set on error
  6002.                 AX = error code (see below)
  6003.     AX = 0203h build alias to real-mode segment
  6004.         BX = descriptor
  6005.         CX = real-mode segment
  6006.         Return: CF clear if successful
  6007.             CF set on error
  6008.                 AX = error code (see below)
  6009.     AX = 0204h set descriptor base
  6010.         BX = descriptor
  6011.         CX:DX = base address
  6012.         Return: CF clear if successful
  6013.             CF set on error
  6014.                 AX = error code (see below)
  6015.     AX = 0205h set descriptor limit
  6016.         BX = descriptor
  6017.         CX = limit
  6018.         Return: CF clear if successful
  6019.             CF set on error
  6020.                 AX = error code (see below)
  6021.     AX = 0206h set descriptor type/attribute
  6022.         BX = descriptor
  6023.         CL = type
  6024.         CH = attribute
  6025.         Return: CF clear if successful
  6026.             CF set on error
  6027.                 AX = error code (see below)
  6028.     AX = 0207h get descriptor base
  6029.         BX = descriptor
  6030.         Return: CF clear if successful
  6031.                 CX:DX = base address
  6032.             CF set on error
  6033.                 AX = error code (see below)
  6034.     AX = 0300h get size of largest free block of memory
  6035.         Return: CF clear if successful
  6036.                 BX:CX = size
  6037.             CF set on error
  6038.                 AX = error code (see below)
  6039.     AX = 0301h allocate block of extended memory
  6040.         BX:CX = size
  6041.         Return: CF clear if successful
  6042.                 BX:CX = base address
  6043.                 SI:DI = handle
  6044.             CF set on error
  6045.                 AX = error code (see below)
  6046.     AX = 0302h free block of extended memory
  6047.         SI:DI = handle
  6048.         Return: CF clear if successful
  6049.             CF set on error
  6050.                 AX = error code (see below)
  6051.     AX = 0303h map linear memory
  6052.         ES:[DI] = DDS
  6053.         Return: CF clear if successful
  6054.                 BX:CX = base address
  6055.                 SI:DI = handle
  6056.             CF set on error
  6057.                 AX = error code (see below)
  6058.     AX = 0304h unmap linear memory
  6059.         SI:DI = handle
  6060.         Return: CF clear if successful
  6061.             CF set on error
  6062.                 AX = error code (see below)
  6063.     AX = 0400h relocate segment to extended memory
  6064.         ES:SI = base address
  6065.         CX = limit
  6066.         BL = type
  6067.         BH = attribute
  6068.         DX = selector or 0000h
  6069.         Return: CF clear if successful
  6070.                 AX = selector
  6071.                 BX:CX = new base address
  6072.                 SI:DI = handle
  6073.             CF set on error
  6074.                 AX = error code (see below)
  6075.  
  6076. Values for error code:
  6077.  8000h    general error
  6078.  8001h    unsupported function
  6079.  8011h    descriptor unavailable
  6080.  8012h    linear memory unavailable
  6081.  8013h    physical memory unavailable
  6082.  8021h    invalid value
  6083.  8022h    invalid selector
  6084.  8023h    invalid handle
  6085.  
  6086. Format of callup/down register structure:
  6087. Offset    Size    Description
  6088.  00h    DWORD    EDI
  6089.  04h    DWORD    ESI
  6090.  08h    DWORD    EBP
  6091.  0Ch  4 BYTEs    reserved (0)
  6092.  10h    DWORD    EBX
  6093.  14h    DWORD    EDX
  6094.  18h    DWORD    ECX
  6095.  20h    DWORD    EAX
  6096.  24h    DWORD    EIP
  6097.  28h    WORD    CS
  6098.  2Ah  2 BYTEs    reserved (0)
  6099.  2Ch    DWORD    EFLAGS
  6100.  30h    DWORD    ESP
  6101.  34h    WORD    SS
  6102.  36h  2 BYTEs    reserved (0)
  6103.  38h    WORD    ES
  6104.  3Ah  2 BYTEs    reserved (0)
  6105.  3Ch    WORD    DS
  6106.  3Eh  2 BYTEs    reserved (0)
  6107.  40h    WORD    FS
  6108.  42h  2 BYTEs    reserved (0)
  6109.  44h    WORD    GS
  6110.  46h  2 BYTEs    reserved (0)
  6111. --------E-2F44-------------------------------
  6112. INT 2F U - DOS Extender support???
  6113.     AH = 44h
  6114.     AL = function (at least 0Bh, 15h, 17h)
  6115.     ???
  6116. Return: ???
  6117. Note:    called by Codeview for Windows
  6118. SeeAlso: AH=86h
  6119. --------G-2F4500-----------------------------
  6120. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  6121.     AX = 4500h
  6122. Return: AL = 01h if PROF.COM installed
  6123.     AL = 02h if VPROD.386 installed
  6124. SeeAlso: AX=4501h,AX=4502h
  6125. --------G-2F4501-----------------------------
  6126. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  6127.     AX = 4501h
  6128.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  6129.     CX = output limit in KB (second parameter for ProfSetup)
  6130. Note:    this call is not supported by PROF.COM
  6131. SeeAlso: AX=4502h,AX=4503h
  6132. --------G-2F4502-----------------------------
  6133. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  6134.     AX = 4502h
  6135.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  6136.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  6137.     CX = sampling rate for VPROD.386
  6138. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  6139.       low four bits of CMOS register 0Ah.  The interruption rate is
  6140.       1 SHL (15 - BL) per second.
  6141. SeeAlso: AX=4501h,AX=4503h
  6142. --------G-2F4503-----------------------------
  6143. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  6144.     AX = 4503h
  6145. Notes:    Profiling is also turned on by the key combinations
  6146.       LeftShift + RightShift + Alt
  6147.       LeftShift + RightShift + Ctrl
  6148.     for PROF.COM, this call programs the CMOS clock by reading register
  6149.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  6150.       is unmasked
  6151. SeeAlso: AX=4504h
  6152. --------G-2F4504-----------------------------
  6153. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  6154.     AX = 4504h
  6155. Notes:    profiling is also turned off by the key combination
  6156.       LeftShift + RightShift
  6157.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  6158.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  6159. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  6160. --------G-2F4505-----------------------------
  6161. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  6162.     AX = 4505h
  6163. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  6164. --------G-2F4506-----------------------------
  6165. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  6166.     AX = 4506h
  6167. SeeAlso: AX=4505h,AX=4507h
  6168. --------G-2F4507-----------------------------
  6169. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  6170.     AX = 4507h
  6171. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  6172.       "ProfFlush" (AX=4506h)
  6173. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  6174. --------G-2F4508-----------------------------
  6175. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  6176.     AX = 4508h
  6177.     BX = ordinal (or 0000h)
  6178.     CX = segment
  6179.     DX = instance (or 0000h)
  6180.     SI = type (or 0000h)
  6181.     ES:DI -> ASCIZ module name
  6182. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  6183.       interface, but only to function 0, for notifying the profiler of
  6184.       each new segment loaded.  The SHOWHITS utility then examines the
  6185.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  6186.       with symbol files to provide information in a useful form.
  6187.     this call does not have a corresponding Windows function
  6188. SeeAlso: AX=4500h
  6189. --------D-2F4601-----------------------------
  6190. INT 2F U - DOS 5+ kernel - ???
  6191.     AX = 4601h
  6192. Return: ???
  6193. Note:    copies the MCB following the caller's PSP memory block into DOS data
  6194.       segment
  6195. SeeAlso: AX=4602h
  6196. --------D-2F4602-----------------------------
  6197. INT 2F U - DOS 5+ kernel - ???
  6198.     AX = 4602h
  6199. Return: ???
  6200. Note:    copies previously copied MCB from DOS data segment into MCB following
  6201.       caller's PSP memory block
  6202. SeeAlso: AX=4601h
  6203. --------E-2F46-------------------------------
  6204. INT 2F U - Windows/286 DOS Extender
  6205.     AH = 46h
  6206.     AL = subfunction (03h,04h)
  6207. Return: ???
  6208. Note:    these two subfunctions are called by MS Windows 3.0
  6209. --------v-2F4653CX0002-----------------------
  6210. INT 2F - F-PROT v1.x only - F-LOCK.EXE
  6211.     AX = 4653h
  6212.     CX = 0002h
  6213.     BX = subfunction
  6214.         0000h  installation check
  6215.         Return: AX = FFFFh
  6216.         0001h  uninstall
  6217.         Return: AX,BX,ES destroyed
  6218.         0002h  disable (v1.08 and below only)
  6219.         0003h  enable (v1.08 and below only)
  6220. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  6221.       Skulason
  6222. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  6223. Index:    installation check;F-LOCK|uninstall;F-LOCK
  6224. --------v-2F4653CX0003-----------------------
  6225. INT 2F - F-PROT v1.x only - F-XCHK.EXE
  6226.     AX = 4653h
  6227.     CX = 0003h
  6228.     BX = subfunction
  6229.         0000h  installation check
  6230.         Return: AX = FFFFh
  6231.         0001h  uninstall
  6232.         Return: AX,BX,ES destroyed
  6233. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  6234.       Skulason
  6235. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  6236. Index:    installation check;F-XCHK|uninstall;F-XCHK
  6237. --------v-2F4653CX0004-----------------------
  6238. INT 2F - F-PROT v1.x only - F-POPUP.EXE
  6239.     AX = 4653h
  6240.     CX = 0004h
  6241.     BX = subfunction
  6242.         0000h  installation check
  6243.         Return: AX = FFFFh
  6244.         0001h  uninstall
  6245.         Return: AX,BX,ES destroyed
  6246.         0002h  disable (v1.08 and below only)
  6247.            display message (v1.14+)
  6248.             other registers: ???
  6249.         0003h  enable (v1.08 and below only)
  6250.            display message (v1.14+)
  6251.             other registers: ???
  6252.             Return: AX = key pressed by user
  6253. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  6254.       Fridrik Skulason
  6255. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  6256. Index:    installation check;F-POPUP|uninstall;F-POPUP
  6257. --------v-2F4653CX0005-----------------------
  6258. INT 2F - F-PROT v1.x only - F-DLOCK.EXE
  6259.     AX = 4653h
  6260.     CX = 0005h
  6261.     BX = subfunction
  6262.         0000h installation check
  6263.         Return: AX = FFFFh
  6264.         0001h uninstall
  6265.         Return: AX,BX,ES destroyed
  6266. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  6267.       Fridrik Skulason
  6268. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  6269. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  6270. --------W-2F4680-----------------------------
  6271. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  6272.     AX = 4680h
  6273. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  6274.            or DOS 5 DOSSHELL active
  6275.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  6276.             mode
  6277. Note:    Windows 3.1 finally provides an installation check which works in all
  6278.       modes (see AX=160Ah)
  6279. SeeAlso: AX=1600h,AX=160Ah
  6280. ----------2F47-------------------------------
  6281. INT 2F U - ???
  6282.     AH = 47h
  6283.     ???
  6284. Return: ???
  6285. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  6286. --------K-2F4800-----------------------------
  6287. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  6288.     AX = 4800h
  6289. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  6290.         ES = segment of DOSKEY resident portion
  6291. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  6292. SeeAlso: AX=4800h"PCED",AX=4810h
  6293. --------K-2F4800-----------------------------
  6294. INT 2F - PCED v2.1 - INSTALLATION CHECK
  6295.     AX = 4800h
  6296. Return: AX = AACDh if installed
  6297.         ES = segment of PCED kernel (PCED has multiple code segments)
  6298. Program: PCED v2.1 is a command line editor/history/macro facility by
  6299.       Cove Software.  It is the commercial version of the freeware CED.
  6300. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  6301.     unlike DOSKEY, PCED does *not* chain if AL contains an
  6302.       unsupported function code.  It IRETs with all registers intact.
  6303. --------K-2F4810-----------------------------
  6304. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  6305.     AX = 4810h
  6306.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  6307. Return: AX = 0000h if successful
  6308. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  6309.       the previous handler; PCED allows sizes other than 80h
  6310.     if the user's input is a macro name, no text is placed in the buffer
  6311.       even though AX=0000h on return; the program must immediately issue
  6312.       this call again to retrieve the expansion of the macro.  Similarly,
  6313.       if the user enters a special parameter such as $*, this call must
  6314.       be repeated to retrieve the expansion; on the second call, DOSKEY
  6315.       overwrites the macro name on the screen with its expansion.
  6316.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  6317.       not necessary to make two calls; since the buffer is not empty on
  6318.       return, DOSKEY-aware programs will not make the second call
  6319.     DOSKEY chains if AL is not 00h or 10h on entry
  6320. SeeAlso: AX=4800h,INT 21/AH=0Ah
  6321. --------K-2F48C0-----------------------------
  6322. INT 2F - PCED v2.1 - PCED API
  6323.     AX = 48C0h
  6324.     DX = API function code
  6325.     other registers as required by the specified function
  6326. Return: CF clear if successful
  6327.     CF set on error
  6328.         AX = PCED error code
  6329.     other registers as appropriate for API function
  6330. Program: PCED v2.1 is a command line editor/history/macro facility by
  6331.       Cove Software.  It is the commercial version of the freeware CED.
  6332. Note:    the full API information is available from Cove Software
  6333. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  6334. ----------2F48C1BL00-------------------------
  6335. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  6336.     AX = 48C1h
  6337.     BL = 00h
  6338. Return: AX = 0000h if installed
  6339.         BX = VSTACK resident segment
  6340. Program: VSTACK is a resident backscroll utility included as part of the PCED
  6341.       package
  6342. Note:    chains if BL <> 00h on entry
  6343. SeeAlso: AX=48C0h,AX=48C2h
  6344. ----------2F48C2BL00-------------------------
  6345. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  6346.     AX = 48C2h
  6347.     BL = 00h
  6348. Return: AX = 0000h if installed
  6349.         BX = ATTRIB resident segment
  6350. Program: ATTRIB is a resident file attribute changer included as part of the
  6351.       PCED package
  6352. Note:    chains if BL <> 00h on entry
  6353. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  6354. --------K-2F48C3BL00-------------------------
  6355. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  6356.     AX = 48C3h
  6357.     BL = 00h
  6358. Return: AX = 0000h if installed
  6359.         BX = KEYDEF resident segment
  6360. Program: KEYDEF is a resident keyboard redefinition utility included as part
  6361.       of the PCED package
  6362. Note:    chains if BL <> 00h on entry
  6363. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  6364. ----------2F48C4BL00-------------------------
  6365. INT 2F - PCED/FLIST - INSTALLATION CHECK
  6366.     AX = 48C4h
  6367.     BL = 00h
  6368. Return: AX = 0000h if installed
  6369.         BX = FLIST resident segment
  6370. Program: FLIST is a resident filelist processor included as part of the PCED
  6371.       package
  6372. Note:    chains if BL <> 00h on entry
  6373. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  6374. ----------2F48C4BL00-------------------------
  6375. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  6376.     AX = 48C4h
  6377.     BL = 00h
  6378. Return: AX = 0000h if installed
  6379.         BX = ASSOC resident segment
  6380. Program: ASSOC is a resident utility included as part of the PCED package which
  6381.       associated files with executable programs based on their extensions
  6382. Note:    chains if BL > 02h on entry
  6383. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  6384. ----------2F48C5BL01-------------------------
  6385. INT 2F - PCED/ASSOC - VERSION CHECK
  6386.     AX = 48C5h
  6387.     BL = 01h
  6388. Return: AX = 0000h if installed
  6389.         BX = binary ASSOC version (BL = major, BH = minor)
  6390. Note:    chains if BL > 02h on entry
  6391. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  6392. ----------2F48C5BL02-------------------------
  6393. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  6394.     AX = 48C5h
  6395.     BL = 02h
  6396.     DS:SI -> ASCIZ filename
  6397. Return: AX = status
  6398.         0000h if filename is unknown
  6399.         0001h if there is an association defined for the file
  6400.     BX destroyed
  6401. Program: ASSOC is a resident utility included as part of the PCED package which
  6402.       associated files with executable programs based on their extensions
  6403. Note:    chains if BL > 02h on entry
  6404. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  6405. ----------2F49-------------------------------
  6406. INT 2F U - ???
  6407.     AH = 49h
  6408.     ???
  6409. Return: ???
  6410. Note:    reportedly called by DOS 5.0 installation
  6411. --------D-2F4A00CX0000-----------------------
  6412. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  6413.     AX = 4A00h
  6414.     CX = 0000h
  6415.     DH = new drive number
  6416.     DL = current drive number
  6417. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  6418. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  6419.       "Insert diskette for drive X:" on single-floppy systems
  6420. --------D-2F4A01-----------------------------
  6421. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  6422.     AX = 4A01h
  6423. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  6424.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  6425. Note:    called by Windows 3.1 DOSX.EXE
  6426. SeeAlso: AX=4310h,AX=4A02h
  6427. --------D-2F4A02-----------------------------
  6428. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  6429.     AX = 4A02h
  6430.     BX = number of bytes
  6431. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  6432.     BX = number of bytes actually allocated (rounded up to next paragraph
  6433.         for DOS 5.0 and 6.0)
  6434. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  6435.     called by Windows 3.1 DOSX.EXE
  6436. SeeAlso: AX=4A01h
  6437. --------T-2F4A05-----------------------------
  6438. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  6439.     AX = 4A05h
  6440.     SI = function
  6441.         0000h reset???
  6442.         0001h ???
  6443.         ES:BP -> 80-byte buffer containing ???
  6444.         0002h ???
  6445.         0003h ???
  6446.         0004h ???
  6447.         BL = ???
  6448.         0005h ???
  6449.         0006h get ???
  6450.         Return: ES:SI -> ???
  6451.         0007h get ???
  6452.         Return: AX = ???
  6453.         0008h get ???
  6454.         Return: DX:AX -> ??? (internal control data of some kind)
  6455.         0009h get ???
  6456.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  6457.         000Ah ???
  6458.         BL = length of buffer
  6459.         ES:BP -> buffer containing ???
  6460.         000Bh get ???
  6461.         Return: AX = ???
  6462.         000Ch ???
  6463.         BL = ???
  6464.         Return: if BL nonzero on entry
  6465.                 DX:AX -> ???
  6466.             if BL = 00h on entry
  6467.                 ES:SI -> ???
  6468. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  6469.       listed above
  6470.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  6471.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  6472. SeeAlso: AX=4B01h
  6473. --------D-2F4A06-----------------------------
  6474. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  6475.     AX = 4A06h
  6476.     DX = segment following last byte of conventional memory
  6477. Return: DX = segment following last byte of memory available for use by DOS
  6478. Desc:    used to override the default memory size when booting diskless
  6479.       workstations
  6480. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  6481.       present three bytes beyond the INT 2F handler; this call overrides
  6482.       the value returned by INT 12
  6483.     hooked by RPL code at the top of memory to protect itself from being
  6484.       overwritten; DOS builds a memory block with owner = 0008h and name
  6485.       "RPL" which must be freed by the RPL code when it is done
  6486. SeeAlso: INT 12
  6487. --------N-2F4A07-----------------------------
  6488. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  6489.     AX = 4A07h
  6490.     ???
  6491. Return: ???
  6492. --------c-2F4A10BX0000-----------------------
  6493. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  6494.     AX = 4A10h
  6495.     BX = 0000h
  6496.     CX = EBABh (v4.1+; see Note)
  6497. Return: AX = BABEh if installed
  6498.         DX:BX = cache hits
  6499.         DI:SI = cache misses
  6500.         CX = ???
  6501.         BP = version in BCD (4.10 = 0410h)
  6502. Notes:    most of the SMARTDRV API, including this call, is supported by
  6503.       PC-Cache v8.0
  6504.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  6505.       unless CX=EBABh on entry, DBLSPACE.BIN displays the error message
  6506.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and aborts the caller
  6507.       with INT 21/AX=4C00h
  6508.     SMARTDRV v3.x had a completely different API using IOCTL calls
  6509. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  6510. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  6511. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  6512. --------c-2F4A10BX0001-----------------------
  6513. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS
  6514.     AX = 4A10h
  6515.     BX = 0001h
  6516. Note:    this function is also supported by PC-Cache v8.0.
  6517. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h
  6518. --------c-2F4A10BX0002-----------------------
  6519. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  6520.     AX = 4A10h
  6521.     BX = 0002h
  6522. Note:    this function is also supported by PC-Cache v8.0.
  6523. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  6524. --------c-2F4A10BX0003-----------------------
  6525. INT 2F - SMARTDRV v4.00+ - STATUS
  6526.     AX = 4A10h
  6527.     BX = 0003h
  6528.     BP = drive # (0=A, 1=B, etc.)
  6529.     DL = subfunction
  6530.         00h only get information
  6531.         01h turn on read cache
  6532.         02h turn off read cache
  6533.         03h turn on write cache
  6534.         04h turn off write cache
  6535. Return: AX = BABEh if OK
  6536.     DL = status
  6537.         bit 7  not cached
  6538.         bit 6  write-through (not write-cached)
  6539.         bit 5  ???
  6540.         bits 0-4 drive # (0=A, 1=B...)
  6541.     DL = FFh if drive does not exist
  6542. Notes:    If the read cache is off, reads will not be cached, but writes will
  6543.       continue to be cached if the write-cache is enabled.
  6544.     this function is also supported by PC-Cache v8.0.
  6545. SeeAlso: AX=4A10h/BX=0000h
  6546. --------c-2F4A10BX0004-----------------------
  6547. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  6548.     AX = 4A10h
  6549.     BX = 0004h
  6550. Return: AX = current size in elements???
  6551.     BX = largest number of elements
  6552.     CX = size of elements in bytes
  6553.     DX = number of elements under Windows
  6554. Note:    this function is also supported by PC-Cache v8.0.
  6555. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  6556. --------c-2F4A10BX0005-----------------------
  6557. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  6558.     AX = 4A10h
  6559.     BX = 0005h
  6560.     BP = drive # (0=A, 1=B...)
  6561. Return: AX = BABEh if double-buffered
  6562.         ES:DI -> ???
  6563. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  6564. --------c-2F4A10BX0006-----------------------
  6565. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  6566.     AX = 4A10h
  6567.     BX = 0006h
  6568.     CL = drive number (01h = A:)
  6569. Return: AX = 0006h if drive should not be cached by SMARTDRV
  6570. Note:    called by SMARTDRV at startup to determine whether it should cache
  6571.       a particular drive
  6572. SeeAlso: AX=4A10h/BX=0000h
  6573. --------c-2F4A10BX0007-----------------------
  6574. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  6575.     AX = 4A10h
  6576.     BX = 0007h
  6577.     BP = drive number (00h=A:)
  6578. Return: DL = ???
  6579.     ES:DI -> device driver header for drive
  6580. Note:    this function is also supported by PC-Cache v8.0.
  6581.     this call is reported to always return the driver header of the
  6582.       standard block driver (A:-C:+) for SmartDrive v5.00 from MS-DOS 6.2
  6583. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  6584. --------c-2F4A10BX0008-----------------------
  6585. INT 2F - SMARTDRV v4.20+ - GET/SET FLUSH BEFORE PROMPT, CD-ROM SUPPORT
  6586.     AX = 4A10h
  6587.     BX = 0008h
  6588.     DL = subfunction
  6589.         00h set
  6590.         DH = new states
  6591.             bit 0: flush before prompt
  6592.             bits 1-7 reserved
  6593.         01h get
  6594.         Return: DH = status flags
  6595.                 bit 0: (v4.2+) flush before prompt
  6596.                 bit 1: (v5.0+) CD-ROM caching support installed
  6597. Note:    v4.2 was an interim release to fix problems in the SMARTDRV included
  6598.       with MS-DOS 6.00; v5.00 is included with MS-DOS 6.2
  6599. --------c-2F4A10BX000A-----------------------
  6600. INT 2F - SMARTDRV v4.00+ - GET TABLE POINTER???
  6601.     AX = 4A10h
  6602.     BX = 000Ah
  6603. Return: ES:BX -> table of about 10 bytes or 5 words. Seems to be words
  6604.          pointing to memory addresses containing info??? (see below)
  6605. Note:    this function is also supported by PC-Cache v8.0.
  6606. SeeAlso: AX=4A10h/BX=0000h
  6607.  
  6608. Format of data table:
  6609. Offset    Size    Description
  6610.  00h  8 BYTEs    ???
  6611.  08h    WORD    offset of WORD containing number of elements in cache
  6612. --------c-2F4A10BX1234-----------------------
  6613. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  6614.     AX = 4A10h
  6615.     BX = 1234h
  6616. Desc:    pops up a message box saying that a serious error occurred and to hit
  6617.       R to retry.
  6618. Note:    this function is also supported by PC-Cache v8.0.
  6619. SeeAlso: AX=4A10h/BX=0000h
  6620. --------d-2F4A11BX0000-----------------------
  6621. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  6622.     AX = 4A11h
  6623.     BX = 0000h
  6624. Return: AX = 0000h (successful)
  6625.     BX = 444Dh ("DM")
  6626.     CL = first drive letter used by DBLSPACE (41h ['A'] = A:)
  6627.     CH = number of drive letters used by DBLSPACE
  6628.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  6629.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  6630.         position in memory (i.e. DBLSPACE.SYS /MOVE)
  6631. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6632.       disk-compression software bundled with MS-DOS 6.0
  6633. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  6634. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  6635. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  6636. --------d-2F4A11BX0001-----------------------
  6637. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  6638.     AX = 4A11h
  6639.     BX = 0001h
  6640.     DL = drive number (0=A:)
  6641. Return: AX = status (see also below)
  6642.         0000h successful
  6643.         if DL was compressed drive,
  6644.             BL = host drive (bit 7 set if drive is compressed)
  6645.         else if DL was host drive,
  6646.             BL = compressed drive
  6647.         else
  6648.             BL = specified drive (if available for DoubleSpace)
  6649.         BH = DoubleSpace sequence number
  6650.         other error code (0101h) (see below)
  6651.         apparently never returned for the MS-DOS 6.2 DoubleSpace
  6652. Note:    the compressed volume file for the specified compressed drive is
  6653.       host:\DBLSPACE.sequence
  6654. SeeAlso: AX=4A11h/BX=0000h
  6655.  
  6656. Values for status:
  6657.  0000h    successful
  6658.  0100h    bad function
  6659.  0101h    invalid drive
  6660.  0102h    not a compressed drive
  6661.  0103h    drive already swapped
  6662.  0104h    drive not swapped
  6663. --------d-2F4A11BX0002-----------------------
  6664. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  6665.     AX = 4A11h
  6666.     BX = 0002h
  6667.     DL = drive number (0=A:) of compressed drive to swap with its host
  6668. Return: AX = status (0000h,0101h,0102h,0103h) (see AX=4A11h/BX=0001h)
  6669. Note:    this function is intended for use by DBLSPACE.EXE only
  6670. SeeAlso: AX=4A11h/BX=0000h
  6671. --------d-2F4A11BX0003-----------------------
  6672. INT 2F - DBLSPACE.BIN - "DSGetEntryPoints" - GET DEVICE DRIVER ENTRY POINTS
  6673.     AX = 4A11h
  6674.     BX = 0003h
  6675.     CL = drive number (0=A:) of compressed drive
  6676. Return: CL = FFh on error (not compressed drive)
  6677.        = other driver unit number of host drive
  6678.         ES:SI -> device driver's strategy routine
  6679.         ES:DI -> device driver's interrupt routine
  6680.     BX destroyed
  6681. Note:    in conjunction with subfunction 0004h, this call allows disk caches
  6682.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  6683.       drives just like SMARTDRV applies to regular block devices
  6684. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  6685. --------d-2F4A11BX0004-----------------------
  6686. INT 2F - DBLSPACE.BIN - "DSSetEntryPoints" - SET DEVICE DRIVER ENTRY POINTS
  6687.     AX = 4A11h
  6688.     BX = 0004h
  6689.     CL = drive number (0=A:) of compressed drive
  6690.     DL = unit number for new driver entry points
  6691.     DH = 00h
  6692.     ES:SI -> device driver strategy routine to call for drive
  6693.     ES:DI -> device driver interrupt routine to call for drive
  6694. Return: CL = FFh on error (not a compressed drive)
  6695.     BX destroyed
  6696. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6697.       disk-compression software bundled with MS-DOS 6.0
  6698. Note:    in conjunction with subfunction 0003h, this call allows disk caches
  6699.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  6700.       drives just like SMARTDRV applies to regular block devices
  6701. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  6702. --------d-2F4A11BX0005-----------------------
  6703. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  6704.     AX = 4A11h
  6705.     BX = 0005h
  6706.     DL = drive number (0=A:) to assign to new drive
  6707.     ES:SI -> activation record (see below)
  6708. Return: status returned in activation record (see below)
  6709. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  6710.  
  6711. Format of activation record:
  6712. Offset    Size    Description
  6713.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  6714.  02h    BYTE    4Dh ('M') mount command
  6715.  03h    BYTE    error code (set to FFh before calling)
  6716.         00h successful
  6717.         01h drive letter not available for DoubleSpace
  6718.         02h drive letter already in use
  6719.         03h no more disk units (increase MaxRemovableDrives in .INI)
  6720.         09h CVF too fragmented
  6721.  04h    BYTE    host drive number (0=A:)
  6722.  05h    ???    DISK_UNIT structure (not documented)
  6723. --------d-2F4A11BX0006-----------------------
  6724. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  6725.     AX = 4A11h
  6726.     BX = 0006h
  6727.     DL = drive number (0=A:) to unmount
  6728. Return: AX = status (0000h,0102h) (see AX=4A11h/BX=0001h)
  6729. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  6730. --------d-2F4A11BX0007-----------------------
  6731. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  6732.     AX = 4A11h
  6733.     BX = 0007h
  6734.     DL = compressed drive number (0=A:)
  6735. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  6736.         0000h successful
  6737.         DS:SI -> free space record (see below)
  6738. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6739.       disk-compression software bundled with MS-DOS 6.0
  6740. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6741.  
  6742. Format of free space record:
  6743. Offset    Size    Description
  6744.  00h    DWORD    total number of sectors in drive's sector heap
  6745.  04h    DWORD    number of free sectors in drive's sector heap
  6746. --------d-2F4A11BX0008-----------------------
  6747. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  6748.     AX = 4A11h
  6749.     BX = 0008h
  6750.     DL = compressed drive number (0=A:)
  6751. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  6752.         0000h successful
  6753.         BX = maximum entries in File Fragment heap
  6754.         CX = available entries in File Fragment heap
  6755. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  6756. --------d-2F4A11BX0009-----------------------
  6757. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  6758.     AX = 4A11h
  6759.     BX = 0009h
  6760.     DL = compressed drive number (0=A:)
  6761. Return: AX = status (see also AX=4A11h/BX=0001h)
  6762.         0000h successful
  6763.         CL = number of DISK_UNIT structures allocated
  6764.             (see AX=4A11h/BX=0005h)
  6765.         CH = DoubleGuard enabled-checks bitflags in bits 6-0 (DOS 6.2)
  6766. Note:    the DoubleGuard checks are enabled or disabled as a block by the
  6767.       DoubleGuard= line in DBLSPACE.INI; they may be individually set with
  6768.       the CheckSum= line.
  6769. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6770. --------d-2F4A11BX000A-----------------------
  6771. INT 2F - DBLSPACE.BIN 6.2 - SET AUTOMOUNT DRIVES
  6772.     AX = 4A11h
  6773.     BX = 000Ah
  6774.     CX:DX = bitmask of drives on which to enable AutoMount
  6775.         (DX bit 0 = A:, CX bit 0 = P:, etc.)
  6776. Return: AX = 0000h if supported
  6777.         CX:DX = old mask or 0000h:0000h on error
  6778.     BX destroyed
  6779. SeeAlso: AX=4A11h/BX=000Bh
  6780. --------d-2F4A11BX000B-----------------------
  6781. INT 2F - DBLSPACE.BIN 6.2 - GET AUTOMOUNT DRIVES
  6782.     AX = 4A11h
  6783.     BX = 000Bh
  6784. Return: AX = 0000h if supported
  6785.         CX:DX = mask of drives with AutoMount enabled
  6786.         0000h:0000h on error
  6787.     BX destroyed
  6788. SeeAlso: AX=4A11h/BX=000Ah
  6789. --------d-2F4A11BXFFFE-----------------------
  6790. INT 2F U - DBLSPACE.BIN - RELOCATE
  6791.     AX = 4A11h
  6792.     BX = FFFEh
  6793.     ES = segment to which to relocate DBLSPACE.BIN
  6794. Return: ???
  6795. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  6796.       in memory
  6797.     this function also unhooks and discards the code providing this
  6798.       function and AX=4A11h/BX=FFFFh
  6799. SeeAlso: AX=4A11h/BX=FFFFh
  6800. --------d-2F4A11BXFFFF-----------------------
  6801. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  6802.     AX = 4A11h
  6803.     BX = FFFFh
  6804. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  6805. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  6806.       position in memory
  6807. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  6808. --------d-2F4A12CX4D52-----------------------
  6809. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  6810.     AX = 4A12h
  6811.     CX = 4D52h ("MR")
  6812.     DX = 4349h ("CI")
  6813. Return: CX = 4943h ("IC") if installed
  6814.     DX = 524Dh ("RM") if installed
  6815.         ES:DI -> MRCINFO structure (see INT 1A/AX=B001h)
  6816. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  6817.       called first, as the latter call is used for the first, ROM-based
  6818.       MRCI server, while this call is used for RAM-based servers which
  6819.       may be partially or entirely replacing a prior server
  6820. SeeAlso: INT 1A/AX=B001h
  6821. --------d-2F4A13-----------------------------
  6822. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  6823.     AX = 4A13h
  6824. Return: AX = 134Ah if supported
  6825.         ES:BX -> entry point record (see below)
  6826. SeeAlso: AX=4A11h/BX=0000h
  6827.  
  6828. Format of entry point record:
  6829. Offset    Size    Description
  6830.  00h    DWORD    pointer to FAR function for ???
  6831.  04h  5 BYTEs    FAR JUMP instruction to ???
  6832. --------N-2F4B-------------------------------
  6833. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  6834.     AH = 4Bh
  6835.     ???
  6836. Return: ???
  6837. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  6838.       file/printer services
  6839. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  6840. --------T-2F4B01-----------------------------
  6841. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  6842.     AX = 4B01h
  6843.     CX:DX -> task switcher entry point (see AX=4B02h)
  6844.     ES:BX = 0000h:0000h
  6845. Return: ES:BX -> callback info structure (see below) or 0000h:0000h
  6846. Notes:    called by the task switcher
  6847.     this function is hooked by clients which require notification of task
  6848.       switcher activities; the call must first be passed on to the prior
  6849.       handler with registers unchanged using a simulated interrupt.     On
  6850.       return, the client must build a callback info structure and store
  6851.       the returned ES:BX in the "next" field, then return the address of
  6852.       its own callback info structure.
  6853.     a client program must add itself to the notification chain if it
  6854.       provides services to other programs; before terminating, it must
  6855.       remove itself from the chain by calling the task switcher's entry
  6856.       point with AX=0005h (see AX=4B02h)
  6857.     the task switcher entry point should not be saved, as it is subject to
  6858.       change and will be provided on any notification call
  6859.     the Windows 3.1 Standard Mode supports this API
  6860. SeeAlso: AX=160Bh,AX=4B02h
  6861.  
  6862. Format of callback info structure:
  6863. Offset    Size    Description
  6864.  00h    DWORD    pointer to next callback info structure
  6865.  04h    DWORD    pointer to notification function (see below)
  6866.  08h    DWORD    reserved
  6867.  0Ch    DWORD    address of zero-terminated list of API info structures
  6868.         (see AX=4B02h)
  6869.  
  6870. Notification function is called with:
  6871.     AX = function
  6872.         0000h switcher initialization
  6873.         Return: AX = 0000h if OK to load
  6874.                = nonzero to abort task switcher
  6875.         0001h query suspend
  6876.         BX = session ID
  6877.         Return: AX = 0000h if OK to switch session
  6878.                = 0001h if not
  6879.         0002h suspend session
  6880.         BX = session ID
  6881.         interrupts disabled
  6882.         Return: AX = 0000h if OK to switch session
  6883.                = 0001h if not
  6884.         0003h activate session
  6885.         BX = session ID
  6886.         CX = session status flags
  6887.             bit 0: set if first activation of session
  6888.             bits 1-15: reserved (0)
  6889.         interrupts disabled
  6890.         Return: AX = 0000h
  6891.         0004h session active
  6892.         BX = session ID
  6893.         CX = session status flags
  6894.             bit 0: set if first activation of session
  6895.             bits 1-15: reserved (0)
  6896.         Return: AX = 0000h
  6897.         0005h create session
  6898.         BX = session ID
  6899.         Return: AX = 0000h if OK to create session
  6900.                = 0001h if not
  6901.         0006h destroy session
  6902.         BX = session ID
  6903.         Return: AX = 0000h
  6904.         0007h switcher termination
  6905.         BX = flags
  6906.             bit 0: set if calling switcher is only switcher loaded
  6907.             bits 1-15: reserved (0)
  6908.         Return: AX = 0000h
  6909.     ES:DI -> task switcher entry point (see AX=4B02h)
  6910. Notes:    function 0000h is generally called by the program which controls or
  6911.       invokes the task switcher, rather than by the task switcher itself;
  6912.       the entry point supplied to this function is not necessarily the
  6913.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  6914.       any client indicates that loading is not possible, all clients will
  6915.       be called with function 0007h; thus it is possible for a client to
  6916.       receive a termination notice without a corresponding initialization
  6917.       notice.
  6918.     except for functions 0002h and 0003h, the notification handler is
  6919.       called with interrupts enabled and may make any INT 21h function
  6920.       call; interrupts must not be enabled in functions 0002h and 0003h
  6921.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  6922.       point is no longer valid
  6923. --------T-2F4B02BX0000-----------------------
  6924. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  6925.     AX = 4B02h
  6926.     BX = 0000h
  6927.     ES:DI = 0000h:0000h
  6928. Return: ES:DI = 0000h:0000h if task switcher not loaded
  6929.     ES:DI -> task switcher entry point (see below) if loaded
  6930.         AX = 0000h
  6931. Notes:    the returned entry point is that for the most-recently loaded task
  6932.       switcher; the entry points for prior task switchers may be determined
  6933.       with the "get version" call (see below)
  6934.     this function is supported by PC Tools v8+ CPTASK
  6935. SeeAlso: AX=4A05h,AX=4B03h
  6936.  
  6937. Call task switcher entry point with:
  6938.     AX = 0000h get version
  6939.         Return: CF clear if successful
  6940.                 AX = 0000h
  6941.                 ES:BX -> task switcher version struct (see below)
  6942.             CF set if unsupported function
  6943.     AX = 0001h test memory region
  6944.         ES:DI -> first byte to be tested
  6945.         CX = size of region to test
  6946.         Return: CF clear if successful
  6947.                 AX = memory type of tested region
  6948.                 0000h global
  6949.                 0001h global and local
  6950.                 0002h local (replaced on session switch)
  6951.             CF set if unsupported function
  6952.     AX = 0002h suspend switcher
  6953.         ES:DI -> new task switcher's entry point
  6954.         Return: CF clear if successful
  6955.                 AX = state
  6956.                 0000h switcher has been suspended
  6957.                 0001h switcher not suspended, new switcher must
  6958.                     abort
  6959.                 0002h switcher not suspended, but new switcher
  6960.                     may run anyway
  6961.             CF set if unsupported function
  6962.     AX = 0003h resume switcher
  6963.         ES:DI -> new task switcher's entry point
  6964.         Return: CF clear if successful
  6965.                 AX = 0000h
  6966.             CF set if unsupported function
  6967.     AX = 0004h hook notification chain
  6968.         ES:DI -> callback info structure to be added to chain
  6969.             (see AX=4B01h)
  6970.         Return: CF clear if successful
  6971.                 AX = 0000h
  6972.             CF set if unsupported function
  6973.     AX = 0005h unhook notification chain
  6974.         ES:DI -> callback info structure to be removed from chain
  6975.             (see AX=4B01h)
  6976.         Return: CF clear if successful
  6977.                 AX = 0000h
  6978.             CF set if unsupported function
  6979.     AX = 0006h query API support
  6980.         BX = asynchronous API identifier
  6981.         Return: CF clear if successful
  6982.                 AX = 0000h
  6983.                 ES:BX -> API info structure (see below) for the
  6984.                     client which provides the highest
  6985.                     level of
  6986.             CF set if unsupported function
  6987.  
  6988. Format of task switcher version structure:
  6989. Offset    Size    Description
  6990.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  6991.  02h    WORD    minor version of supported protocol
  6992.  04h    WORD    major version of task switcher
  6993.  06h    WORD    minor version of task switcher
  6994.  08h    WORD    task switcher ID (see AX=4B03h)
  6995.  0Ah    WORD    operation flags
  6996.         bit 0: set if task switcher disabled
  6997.         bits 1-15: reserved (0)
  6998.  0Ch    DWORD    pointer to ASCIZ task switcher name
  6999.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  7000.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  7001.  
  7002. Format of API info structure:
  7003. Offset    Size    Description
  7004.  00h    WORD    size of structure in bytes (000Ah)
  7005.  02h    WORD    API identifier
  7006.         0001h NetBIOS
  7007.         0002h 802.2
  7008.         0003h TCP/IP
  7009.         0004h LAN Manager named pipes
  7010.         0005h Novell NetWare IPX
  7011.  04h    WORD    major version \ of highest version of API for which the support
  7012.  06h    WORD    minor version / level specified in the next field is provided
  7013.  08h    WORD    support level
  7014.         0001h minimal support
  7015.         0002h API-level support
  7016.         0003h switcher compatibility
  7017.         0004h seamless compatibility
  7018. --------T-2F4B03-----------------------------
  7019. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  7020.     AX = 4B03h
  7021.     ES:DI -> task switcher entry point (see AX=4B02h)
  7022. Return: AX = 0000h
  7023.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  7024. Notes:    if a task switcher has determined that it is the first to be loaded, it
  7025.       must allocate an identifier for itself and provide this function to
  7026.       all subsequent task switchers; if it is not the first to be loaded,
  7027.       it must call this function to allocate an ID.     The switcher ID is
  7028.       used as the high four bits of all session identifiers to ensure
  7029.       unique session IDs.
  7030.     if no more switcher IDs are available, the new task switcher making the
  7031.       call must terminate or disable itself
  7032.     the task switcher providing the identifiers may call the new task
  7033.       switcher's entry point as needed
  7034.     this call is available from within DOSSHELL even if the task switcher
  7035.       is not installed
  7036.     this function is supported by PC Tools v8+ CPTASK, but appears to
  7037.       always return an ID of 0000h
  7038. SeeAlso: AX=4B02h,AX=4B04h
  7039. --------T-2F4B04-----------------------------
  7040. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  7041.     AX = 4B04h
  7042.     BX = switcher ID
  7043.     ES:DI -> task switcher entry point (see AX=4B02h)
  7044. Return: AX = 0000h
  7045.     BX = status
  7046.         0000h successful
  7047.         other error (invalid ID or ID not allocated)
  7048. Notes:    called by a task switcher when it exits, unless it was the first loaded
  7049.       and is providing the support for AX=4B03h and AX=4B04h
  7050.     the task switcher providing the identifiers may call the terminating
  7051.       task switcher's entry point as needed
  7052.     this call is available from within DOSSHELL even if the task switcher
  7053.       is not installed
  7054.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  7055.       sucessfully no matter which ID is given
  7056. SeeAlso: AX=4B02h,AX=4B03h
  7057. --------T-2F4B05-----------------------------
  7058. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  7059.     AX = 4B05h
  7060.     ES:BX = 0000h:0000h
  7061.     CX:DX -> task switcher entry point (see AX=4B02h)
  7062. Return: ES:BX -> startup info structure (see below) or 0000h:0000h
  7063. Notes:    called by task switcher
  7064.     clients with instance data should hook this call, pass it through to
  7065.       the previous handler with unchanged registers using a simulated
  7066.       interrupt.  On return, the client should create a startup info
  7067.       structure (see below), store the returned ES:BX in the "next"
  7068.       field, and return the address of the created structure in ES:BX
  7069.     all MS-DOS function calls are available from within this call
  7070. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  7071.  
  7072. Format of startup info structure:
  7073. Offset    Size    Description
  7074.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  7075.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  7076.  06h    DWORD    0000h:0000h (ignored)
  7077.  0Ah    DWORD    ignored
  7078.  0Eh    DWORD    pointer to instance data records
  7079.  
  7080. Format of one instance data record in array:
  7081. Offset    Size    Description
  7082.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  7083.  04h    WORD    size of instance data
  7084. --------W-2F4B20-----------------------------
  7085. INT 2F - MS Windows 3 - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  7086.     AX = 4B20h
  7087. Return: AX = 0000h if successful
  7088.         DX:CX -> 256-byte buffer for pathname and commandline (see below)
  7089. Note:    when the Windows function ExitWindows is called with an exit code of
  7090.       44h, WIN.COM executes the program specified in the returned buffer
  7091.       and then restarts Windows
  7092.  
  7093. Format of buffer:
  7094. Offset    Size    Description
  7095.  00h 128 BYTEs    ASCIZ pathname of program to execute
  7096.  80h 128 BYTEs    commandline for program
  7097. --------p-2F4C-------------------------------
  7098. INT 2F U - Advanced Power Management
  7099.     AH = 4Ch
  7100.     AL = function
  7101.         00h version check
  7102.         01h suspend system requested
  7103.         FFh suspend/resume battery notification
  7104.     ???
  7105. Return: ???
  7106. ----------2F4D-------------------------------
  7107. INT 2F U - ???
  7108.     AH = 4Dh
  7109.     ???
  7110. Return: ???
  7111. Note:    reportedly called by Kana Kanji Converter and MSKK
  7112. --------N-2F4E53BL00-------------------------
  7113. INT 2F - SilverNET v2+ - INSTALLATION CHECK
  7114.     AX = 4E53h ("NS")
  7115.     BL = 00h (function "installation check")
  7116.     BH = module ID (see below)
  7117. Return: AX = 0000h if specified module installed
  7118.     BX = 4E53h if installed
  7119. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  7120.       Windows systems, by Net-Source, Inc. of Santa Clara, CA.
  7121. SeeAlso: AX=4E53h/BL=01h,AX=4E53h/BL=02h,AX=B800h,AX=B809h
  7122.  
  7123. Values for module ID:
  7124.  01h    SilverCACHE
  7125.  02h    Workstation
  7126.  03h    NetBIOS
  7127.  04h    Peer
  7128.  20h    NS Share
  7129.  80h    NetWare help TSR
  7130. --------N-2F4E53BL01-------------------------
  7131. INT 2F - SilverNET - GET RUNTIME PARAMETER
  7132.     AX = 4E53h ("NS")
  7133.     BL = 01h (function "get runtime parameter")
  7134.     BH = module ID (see AX=4E53h/BL=00h)
  7135.     CX = parameter index (see below)
  7136. Return: AX = WORD value at specified index
  7137. Desc:    retrieve a word of data from the specified SilverNET module
  7138.  
  7139. Values for Peer parameter index (* = read-only):
  7140.  00h *    maximum outstanding SMB buffers
  7141.  02h *    maximum logged-in nodes
  7142.  04h *    number of shareable resources
  7143.  06h *    number of characters to print per time slice
  7144.  08h *    number of printers that can be shared
  7145.  0Ah *    number of nodes logged in
  7146.  0Ch *    number of files to allow opened
  7147.  0Eh    how fast to despool (/PSLICE)
  7148.  10h    audit flag
  7149.  24h *    far pointer to resource table (each resource is 96 bytes in length)
  7150.  32h *    far pointer to SFT (internal if SilverNET files > CONFIG.SYS files,
  7151.     else DOS SFT)
  7152.  36h    spool flag
  7153.     bit 0: LPT1 needs despooling
  7154.     bit 1: LPT2 needs despooling
  7155.     bit 2: LPT2 needs despooling
  7156.     bit 4: COM1 needs despooling
  7157.     bit 5: COM2 needs despooling
  7158.     bit 6: COM3 needs despooling
  7159.  
  7160. Values for NS Share parameter index (* = read-only):
  7161.  00h    version number (high byte = minor, low byte = major)
  7162.  10h *    segment of first lock record (other records in consecutive paragraphs)
  7163.     (if PSP field = 0000h, lock record is free)
  7164.  12h *    maximum possible number of lock records
  7165.  14h *    starting segment of sharing buffer
  7166.     (NS Share's sharing records are identical to DOS SHARE except that
  7167.     fields which are normally offsets into SHARE are segment numbers)
  7168.  18h *    size of sharing buffer in paragraphs
  7169.  1Ah *    total free paragraphs in sharing buffer
  7170.  1Ch *    current number of shared files
  7171.  1Eh *    current number of locked records
  7172.  
  7173. Values for Workstation parameter index (* = read-only):
  7174.  00h    version number (high byte = minor, low byte = major)
  7175.  02h *    size of each network buffer for file operations
  7176.  04h *    number of redirector file buffers
  7177.  06h *    size of each print cache buffer
  7178.  08h *    number of network LPT printers
  7179.  0Ch    flush time in ticks (idle time on network printer before flushing)
  7180.  0Eh    (16 WORDs) last active time for each printer
  7181.  2Eh *    stub segment if program split into two parts
  7182.  60h    receive name number for datagram listens
  7183.  62h *    18-byte machine name
  7184.  74h *    LASTDRIVE (01h = A:, etc.)
  7185.  7Ch    row number of message box on screen
  7186.  7Eh    message time in clock ticks
  7187.  82h *    number of network adapters in use
  7188.  84h    station ID broadcast flag (never set on redirectors)
  7189.  96h *    NetBIOS names left
  7190.  98h *    NCBs left
  7191.  9Ah *    sessions left
  7192.  A2h *    total number of network printers (LPT+COM)
  7193.  A4h *    number of serial network printers
  7194.  A8h *    segment containing file cache buffers
  7195.  AAh *    segment containing print cache buffers
  7196.  ACh *    bytes remaining free in HMA before program loaded
  7197.  AEh *    start of free memory in HMA
  7198.  B2h *    flag: using HMA
  7199. --------N-2F4E53BL02-------------------------
  7200. INT 2F - SilverNET - SET RUNTIME PARAMETERS
  7201.     AX = 4E53h ("NS")
  7202.     BL = 02h (function "set runtime parameters")
  7203.     BH = module ID (see AX=4E53h/BL=00h)
  7204.     CX = parameter index (see AX=4E53h/BL=01h)
  7205.     DX = new value for specified parameter
  7206. Desc:    set a WORD value in the specified SilverNET module
  7207. Note:    not all indexed parameters are writable; modifying a read-only
  7208.       parameter can result in system crashes
  7209. SeeAlso: AX=4E53h/BL=00h,AX=4E53h/BL=01h
  7210. --------p-2F53-------------------------------
  7211. INT 2F U - POWER.EXE - APM event broadcasting???
  7212.     AH = 53h
  7213.     AL = event???
  7214.         05h CPU idle
  7215.         0Bh PM event broadcast API
  7216. Return: ???
  7217. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  7218.       and PC-Cache v8.0
  7219. SeeAlso: AX=530Bh,AH=54h,INT 33/AX=002Fh
  7220. --------p-2F530B-----------------------------
  7221. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  7222.     AX = 530Bh
  7223.     BX = subfunction
  7224.         0003h ???
  7225.         0004h ???
  7226.     ???
  7227. Return: ???
  7228. Note:    it appears that subfunction 0003h reads or restores the current mouse
  7229.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  7230.       the converse
  7231. --------p-2F5400-----------------------------
  7232. INT 2F U - POWER.EXE - INSTALLATION CHECK
  7233.     AX = 5400h
  7234. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  7235.     BX = 504Dh ("PM")
  7236.     CF clear
  7237. Note:    called by MS Windows 3.1 POWER.DRV
  7238. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  7239. --------p-2F5401-----------------------------
  7240. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  7241.     AX = 5401h
  7242.     BX = function
  7243.         0000h get status
  7244.         Return: BL = power management status
  7245.                 bit 0: CPU idle
  7246.                 bit 1: ???
  7247.         ???
  7248. Return: AX = function status
  7249.         0000h success
  7250.         else  error code
  7251. Note:    called by MS Windows 3.1 POWER.DRV
  7252. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  7253. --------p-2F5402-----------------------------
  7254. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  7255.     AX = 5402h
  7256.     BH = subfunction
  7257.         00h get
  7258.         other set
  7259.         BL = detection strategy (00h-0Fh or FFh)
  7260. Return: BX = current/new detection strategy
  7261. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  7262. --------p-2F5403-----------------------------
  7263. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  7264.     AX = 5403h
  7265.     BX = new power management setting or 0000h to get current setting
  7266. Return: AX = status
  7267.         0000h successful
  7268.         BX = power management setting (see below)
  7269.         other error code
  7270. SeeAlso: AX=5401h,AX=5480h
  7271.  
  7272. Values for power management setting:
  7273.  0001h-0005h "min"
  7274.  0006h         "reg"
  7275.  0007h-0008h "max"
  7276. --------t-2F5453-----------------------------
  7277. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  7278.     AX = 5453h
  7279.     BX = subfunction
  7280.         00h installation check
  7281.         CX = 0000h
  7282.         DS:SI -> 8-char blank-padded name
  7283.         Return: AX = FFFFh installed
  7284.                 CX = ID number of already-installed copy
  7285.                = anything else, not installed
  7286.                 CX = ID number for TSR when installed
  7287.         01h get user parameters
  7288.         CX = TSR ID number
  7289.         Return: AX = 0000h successful
  7290.                ES:BX -> user parameter block (see below)
  7291.                = nonzero failed
  7292.         02h check if hotkey in use
  7293.         CL = scan code of hot key
  7294.         Return: AX = FFFFh hot key conflicts with another TSR
  7295.                  otherwise safe to use the hotkey
  7296.         03h replace default critical error handler
  7297.         CX = TSR ID number
  7298.         DS:SI -> new routine for INT 24h
  7299.         Return: AX = nonzero, unable to install new handler
  7300.         04h get internal data area
  7301.         CX = TSR ID number
  7302.         Return: AX = 0000h
  7303.                 ES:BX -> TSR's internal data area (see below)
  7304.                = nonzero, TSR not found
  7305.         05h set multiple hot keys
  7306.         CX = TSR ID number
  7307.         DL = number of additional hot keys to allocate
  7308.         DS:SI -> table of hot keys
  7309.             BYTE  hotkey scan code
  7310.             BYTE  hotkey shift state
  7311.             BYTE  flag value to pass to TSR (nonzero)
  7312.         Return: AX = nonzero, unable to install hot keys
  7313.         06h - 0Fh reserved
  7314.         10h enable TSR
  7315.         CX = TSR ID number
  7316.         Return: AX = nonzero, unable to enable
  7317.         11h disable TSR
  7318.         CX = TSR ID number
  7319.         Return: AX = nonzero, unable to disable
  7320.         12h unload TSR
  7321.         CX = TSR ID number
  7322.         Return: AX = nonzero, invalid TSR number
  7323.         Note: if any interrupts used by TSR have been grabbed by
  7324.             another TSR, the TesSeRact routines will wait until
  7325.             it is safe to remove the indicated TSR from memory
  7326.         13h restart TSR
  7327.         CX = TSR ID number of TSR which was unloaded but is still in
  7328.              memory
  7329.         Return: AX = nonzero, unable to restart TSR
  7330.         14h get status word
  7331.         CX = TSR ID number
  7332.         Return: AX = FFFFh invalid ID number
  7333.                = other, successful
  7334.                 BX = bit flags
  7335.         15h set status word
  7336.         CX = TSR ID number
  7337.         DX = new bit flags
  7338.         Return: AX = nonzero, unable to set status word
  7339.         16h get INDOS state at popup
  7340.         CX = TSR ID number
  7341.         Return: AX = 0000h successful
  7342.                 BX = value of INDOS flag
  7343.         17h - 1Fh reserved
  7344.         20h call user procedure
  7345.         CX = TSR ID number
  7346.         ES:DI -> user-defined data
  7347.         Return: AX = 0000h successful
  7348.         21h stuff keystrokes into keyboard buffer
  7349.         CX = TSR ID number
  7350.         DL = speed
  7351.             00h stuff keystrokes only when buffer is empty
  7352.             01h stuff up to four keystrokes per clock tick
  7353.             02h stuff up to 15 keystrokes per clock tick
  7354.         DH = scan code flag
  7355.             if zero, buffer contains alternating ASCII and scan codes
  7356.             if nonzero, buffer contains only ASCII codes
  7357.         SI = number of keystrokes
  7358.         ES:DI -> buffer to stuff
  7359.         Return: AX = 0000h success
  7360.                  F0F0h user aborted with ^C or ^Break
  7361.                  other unable to stuff keystrokes
  7362.         22h (v1.10) trigger popup
  7363.         CX = TSR ID number
  7364.         Return: AX = 0000h success, TSR will either pop up or beep to
  7365.                    indicate that it is unable to pop up
  7366.                  nonzero invalid ID number
  7367.         23h (v1.10) invoke TSR's background function
  7368.         CX = TSR ID number
  7369.         Return: AX = 0000h success
  7370.                  FFFFh not safe to call background function
  7371.                  nonzero invalid ID number
  7372.         24h - 2Fh reserved
  7373. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  7374.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  7375.       do the SWAP?? programs by Innovative Data Concepts.
  7376.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  7377.       of the user parameter block) using the name "AVATAR  "
  7378. SeeAlso: AX=CAFEh,INT 16/AX=55FFh,INT 2D"AMIS"
  7379. Index:    installation check;TesSeRact TSR interface|uninstall;TesSeRact
  7380.  
  7381. Values for TesSeract names:
  7382.  "AVATAR  "    AVATAR.SYS
  7383.  "QeditTSR"    TSR version of SemWare's Qedit editor
  7384.  "SCRNBLNK"    Trusted Access screen blanker
  7385.  
  7386. Format of User Parameter Block:
  7387. Offset    Size    Description
  7388.  00h  8 BYTEs    blank-padded TSR name
  7389.  08h    WORD    TSR ID number
  7390.  0Ah    DWORD    bitmap of supported functions
  7391.  0Eh    BYTE    scan code of primary hotkey
  7392.             00h = pop up when shift states match
  7393.             FFh = no popup (if shift state also FFh)
  7394.  0Fh    BYTE    shift state of primary hotkey
  7395.             FFh = no popup (if scan code also FFh)
  7396.  10h    BYTE    number of secondary hotkeys
  7397.  11h    DWORD    pointer to extra hotkeys set by func 05h
  7398.  15h    WORD    current TSR status flags
  7399.  17h    WORD    PSP segment of TSR
  7400.  19h    DWORD    DTA for TSR
  7401.  1Dh    WORD    default DS for TSR
  7402.  1Fh    DWORD    stack at popup
  7403.  23h    DWORD    stack at background invocation
  7404. Index:    hotkeys;TesSeRact TSR interface
  7405.  
  7406. Format of TSR internal data area:
  7407. Offset    Size    Description
  7408.  00h    BYTE    revision level of TesSeRact library
  7409.  01h    BYTE    type of popup in effect
  7410.  02h    BYTE    INT 08 occurred since last invocation
  7411.  03h    BYTE    INT 13 occurred since last invocation
  7412.  04h    BYTE    active interrupts
  7413.  05h    BYTE    active soft interrupts
  7414.  06h    BYTE    DOS major version
  7415.  07h    BYTE    how long to wait before popping up
  7416.  08h    DWORD    pointer to INDOS flag
  7417.  0CH    DWORD    pointer to DOS critical error flag
  7418.  10h    WORD    PSP segment of interrupted program
  7419.  12h    WORD    PSP segment of prog interrupted by INT 28
  7420.  14h    DWORD    DTA of interrupted program
  7421.  18h    DWORD    DTA of program interrupted by INT 28
  7422.  1Ch    WORD    SS of interrupted program
  7423.  1Eh    WORD    SP of interrupted program
  7424.  20h    WORD    SS of program interrupted by INT 28
  7425.  22h    WORD    SP of program interrupted by INT 28
  7426.  24h    DWORD    INT 24 of interrupted program
  7427.  28h  3 WORDs    DOS 3+ extended error info
  7428.  2Eh    BYTE    old BREAK setting
  7429.  2Fh    BYTE    old VERIFY setting
  7430.  30h    BYTE    were running MS WORD 4.0 before popup
  7431.  31h    BYTE    MS WORD 4.0 special popup flag
  7432.  32h    BYTE    enhanced keyboard call in use
  7433.  33h    BYTE    delay for MS WORD 4.0
  7434. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  7435.     DWORD    old interrupt vector
  7436.     BYTE    interrupt number
  7437.     WORD    offset in TesSeRact code segment of new interrupt handler
  7438. --------p-2F5480-----------------------------
  7439. INT 2F U - POWER.EXE - GET/SET ???
  7440.     AX = 5480h
  7441.     BX = direction
  7442.         0000h get
  7443.         other set
  7444.     CX = size of buffer (at least 0010h)
  7445.     DS:SI -> buffer
  7446. Return: AX = status
  7447.         0000h successful
  7448.         other error code
  7449. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  7450. --------p-2F5481-----------------------------
  7451. INT 2F U - POWER.EXE - GET STATISTICS
  7452.     AX = 5481h
  7453.     BX = ??? (0000h or 0001h)
  7454.     CX = length of buffer
  7455.     DS:SI -> buffer for statistics (see below)
  7456. Return: AX = status
  7457.         0000h successful
  7458.         else  error code
  7459. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  7460.  
  7461. Format of statistics:
  7462. Offset    Size    Description
  7463.  00h    DWORD    total ???
  7464.  04h    DWORD    ??? during which CPU was idle (divide by previous to get idle
  7465.             rate)
  7466. --------p-2F5482-----------------------------
  7467. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  7468.     AX = 5482h
  7469.     BX = new polling frequency or 0000h to get current frequency
  7470. Return: AX = 0000h (successful)
  7471.     BX = current frequency if BX=0000h on entry
  7472. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  7473. --------p-2F548F-----------------------------
  7474. INT 2F U - POWER.EXE - GET/SET ???
  7475.     AX = 548Fh
  7476.     BX = ??? or 0000h to get current ???
  7477. Return: AX = 0000h (successful)
  7478.     BX = current ???
  7479.     CX = ???
  7480. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  7481. --------l-2F5500-----------------------------
  7482. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  7483.     AX = 5500h
  7484. Return: AX = 0000h if an instance of COMMAND.COM is already running
  7485.     DS:SI -> entry point table
  7486. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  7487.       been moved into the HMA; only the primary COMMAND.COM retains this
  7488.       portion
  7489.     procedures called from a dispatcher in COMMAND's resident portion;
  7490.       most assume that the segment address of the resident portion is on
  7491.       the stack and are thus not of general use
  7492. SeeAlso: AX=5501h
  7493. --------l-2F5501-----------------------------
  7494. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  7495.     AX = 5501h
  7496. Return: ???
  7497. Note:    used to determine whether the caller is the first instance of ROM
  7498.       COMMAND.COM
  7499. SeeAlso: AX=5500h
  7500. --------R-2F5600DXFFFF-----------------------
  7501. INT 2F - INTERLNK - INSTALLATION CHECK
  7502.     AX = 5600h
  7503.     DX = FFFFh
  7504.     BL = instance number (00h = any, 01h = first loaded, etc.)
  7505. Return: AL = FFh if installed
  7506.         BL = instance number
  7507.         CX = ???
  7508.         DX = resident CS
  7509. SeeAlso: AX=5601h,AX=5602h
  7510. --------R-2F5601DXFFFF-----------------------
  7511. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  7512.     AX = 5601h
  7513.     DX = FFFFh
  7514.     BH = drive number (0=A:)
  7515.     BL = 00h
  7516. Return: (as for AL=00h if redirected drive)
  7517. SeeAlso: AX=5600h
  7518. --------R-2F5602DXFFFF-----------------------
  7519. INT 2F - INTERLNK - GET ???
  7520.     AX = 5602h
  7521.     DX = FFFFh
  7522. Return: CX = ???
  7523. SeeAlso: AX=5600h
  7524. ----------2F57-------------------------------
  7525. INT 2F U - ???
  7526.     AH = 57h
  7527.     ???
  7528. Return: ???
  7529. Note:    reportedly used by Iomega Corp.
  7530. --------v-2F6282-----------------------------
  7531. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  7532.     AX = 6282h
  7533.     CX:DX -> ??? or 0000h:0000h
  7534.     DI = segment of ??? record (see below) or 0000h/FFFFh to ignore
  7535. Return: BX = 0062h
  7536. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  7537.       (DATAMON only)
  7538. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  7539.  
  7540. Format of record:
  7541. Offset    Size    Description
  7542.  00h    DWORD    ???
  7543.  04h    WORD    offset of ??? in record's segment
  7544.         VSAFE 2.0 sets byte at +01h to 56h or 58h
  7545.         VWATCH 2.1 sets byte at +02h to 56h or 58h
  7546.  06h  2 BYTEs    ???
  7547.  08h    BYTE    ??? (01h/other)
  7548. --------v-2F6284BX0000-----------------------
  7549. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT    - INSTALLATION CHECK
  7550.     AX = 6284h
  7551.     BX = 0000h
  7552.     CX = 0000h
  7553. Return: AX = segment of resident code
  7554.     BX = 5555h
  7555.     CX = 5555h
  7556. --------v-2F6284BX0001-----------------------
  7557. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  7558.     AX = 6284h
  7559.     BX = 0001h
  7560.     CX = 0001h
  7561. Return: AX:BX -> ??? data (see below)
  7562.     CX = BX
  7563.  
  7564. Format of data for v9.0:
  7565. Offset    Size    Description
  7566.  00h  5 BYTEs    ???
  7567.  05h    WORD    resident code segment (may be segment of DWORD at +03h)
  7568.  07h    DWORD    -> FAR function to sound alert tone
  7569.     ???
  7570. --------v-2F6284BX0002-----------------------
  7571. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET OPTIONS
  7572.     AX = 6284h
  7573.     BX = 0002h
  7574.     CX = 0002h
  7575. Return: AX = options (see below)
  7576.     BX = ??? (0000h for v9)
  7577.     CX = AX
  7578.     DX = BX
  7579.  
  7580. Bitfields for options:
  7581.  bit 14    using Delete Tracker
  7582.  bit 13    using Delete Sentry
  7583.  bit 12    disabled
  7584.  bit 1    ???
  7585. --------v-2F6284BX0003-----------------------
  7586. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - SET ??? FLAGS
  7587.     AX = 6284h
  7588.     BX = 0003h
  7589.     CX = flags
  7590.         bit 12: disable DATAMON/DPROTECT
  7591.         bit 10: ???
  7592.         bit     5: ???
  7593.         bit     3: ???
  7594.     DX = flags
  7595.         bit 15: ???
  7596. Note:    v9 DPROTECT only checks bit 12 of CX, and ignores DX entirely
  7597. --------v-2F6284BX0004-----------------------
  7598. INT 2F U - PC Tools v8 DATAMON, v9+ DPROTECT - ???
  7599.     AX = 6284h
  7600.     BX = 0004h
  7601.     CX = 0004h
  7602. Return: AX = 5555h
  7603.     BX = ??? (0800h)
  7604.     CX = ??? (FCCCh for v8, FCCBh for v9)
  7605. --------V-2F6400-----------------------------
  7606. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  7607.     AX = 6400h
  7608. Return: AL = 00h not installed
  7609.          FFh installed
  7610. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  7611. SeeAlso: INT 10/AX=5555h
  7612. Index:    screen saver;SCRNSAV2
  7613. --------N-2F7000-----------------------------
  7614. INT 2F - License Service API - INSTALLATION CHECK
  7615.     AX = 7000h
  7616.     CX = license server index (0000h to 001Fh)
  7617. Return: AL = status
  7618.         00h not installed
  7619.         FFh installed
  7620. Notes:    The License Service API is being maintained by Microsoft but is being
  7621.       supported by a large number of companies including Apple, Banyan,
  7622.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  7623.       and Wordperfect (not a complete list!)
  7624.     Each license service provider must search for the next free index
  7625.       slot to use
  7626. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  7627. --------N-2F7001-----------------------------
  7628. INT 2F - License Service API - REQUEST LICENSE
  7629.     AX = 7001h
  7630.     CX = license server index (0000h to 001Fh)
  7631.     DS:DX -> SLSREQUEST structure (see below)
  7632. Return: AX = status
  7633.         0000h success
  7634.         else  provider error code
  7635.     ES:BX = provider specific handle for the license context
  7636. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  7637.  
  7638. Format of SLSREQUEST structure:
  7639. Offset    Size    Description
  7640.  00h    DWORD    (return) status code
  7641.  04h    DWORD    (return) handle identifying context
  7642.  08h    DWORD    (call) address of Publisher string
  7643.  0Ch    DWORD    (call) address of Product string
  7644.  10h    DWORD    (call) address of Version string
  7645.  14h    DWORD    units required
  7646.  18h    DWORD    address of comment string
  7647.  1Ch    DWORD    address of SLSCHALLENGE structure (see below)
  7648.  
  7649. Format of SLSCHALLENGE structure:
  7650. Offset    Size    Description
  7651.  00h    DWORD    algorithm (currently always 1)
  7652.  04h    DWORD    secret to be challenged (1-255)
  7653.  08h    DWORD    size of challenge in bytes (1-255)
  7654.  0Ch  N BYTEs    challenge data
  7655. --------N-2F7002-----------------------------
  7656. INT 2F - License Service API - RELEASE LICENSE
  7657.     AX = 7002h
  7658.     CX = license server index (0000h to 001Fh)
  7659.     DS:DX -> SLSRELEASE structure (see below)
  7660.     ES:BX = provider specific handle for the license context
  7661. Return: AL = status
  7662.         00h not installed
  7663.         FFh installed
  7664. SeeAlso: AX=7001h,AX=7005h
  7665.  
  7666. Format of SLSRELEASE structure:
  7667. Offset    Size    Description
  7668.  00h    DWORD    handle indentifying license context
  7669.  04h    DWORD    total units consumed
  7670.  08h    DWORD    address of comment string
  7671. --------N-2F7003-----------------------------
  7672. INT 2F - License Service API - UPDATE
  7673.     AX = 7003h
  7674.     CX = license server index (0000h to 001Fh)
  7675.     DS:DX -> SLSUPDATE structure
  7676.     ES:BX = provider specific handle for the license context
  7677. Return: AL = status
  7678.         00h not installed
  7679.         FFh installed
  7680. SeeAlso: AX=7004h,AX=7005h
  7681.  
  7682. Format of SLSUPDATE structure:
  7683. Offset    Size    Description
  7684.  00h    DWORD    (return) status code
  7685.  04h    DWORD    (call) handle identifying license context
  7686.  08h    DWORD    (call) total units consumed
  7687.  0Ch    DWORD    additional units required
  7688.  10h    DWORD    address of comment string
  7689.  14h    DWORD    address of SLSCHALLENGE structure (see AX=7001h)
  7690. --------N-2F7004-----------------------------
  7691. INT 2F - License Service API - GET ERROR
  7692.     AX = 7004h
  7693.     CX = license server index (0000h to 001Fh)
  7694.     DS:DX -> SLSGETERROR structure (see below)
  7695.     ES:BX = provider specific handle for the license context
  7696. Return: AL = status
  7697.         00h not installed
  7698.         FFh installed
  7699. SeeAlso: AX=7000h,AX=7001h
  7700.  
  7701. Format of SLSGETERROR structure:
  7702. Offset    Size    Description
  7703.  00h    DWORD    (return) status code
  7704.  04h    DWORD    handle identifying license context
  7705.  08h    DWORD    error code
  7706.  0Ch    DWORD    buffer size in bytes
  7707.  10h  N BYTEs    data buffer
  7708. --------N-2F7005-----------------------------
  7709. INT 2F - License Service API - QUERY LICENSE
  7710.     AX = 7005h
  7711.     CX = license server index (0000h to 001Fh)
  7712.     DS:DX -> SLSQUERY structure (see below)
  7713.     ES:BX = provider specific handle for the license context
  7714. Return: AL = status
  7715.         00h not installed
  7716.         FFh installed
  7717. SeeAlso: AX=7001h,AX=7002h
  7718.  
  7719. Format of SLSQUERY structure:
  7720. Offset    Size    Description
  7721.  00h    DWORD    (return) status code
  7722.  04h    DWORD    handle identifying license context
  7723.  08h    DWORD    information index
  7724.  0Ch    DWORD    buffer size in bytes
  7725.  10h  N BYTEs    data buffer
  7726. --------d-2F7200-----------------------------
  7727. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  7728.     AX = 7200h
  7729. Return: AL = FFh if installed
  7730.         ES = segment of device driver header (see below)
  7731. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  7732.  
  7733. Format of device driver header:
  7734. Offset    Size    Description
  7735.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  7736.  0Ah    BYTE    number of subunits (drives) supported by driver
  7737.  0Bh  3 BYTEs    signature "SRD"
  7738.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  7739.  12h  4 BYTEs    ASCII driver version string "N.NN"
  7740.  16h    BYTE    00h
  7741.  17h    BYTE    configuration format version (currently 00h)
  7742.  18h    WORD    offset of drive configuration data
  7743. --------N-2F7A00-----------------------------
  7744. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  7745.     AX = 7A00h
  7746. Return: AL = 00h not installed
  7747.        = FFh installed
  7748.         ES:DI -> FAR entry point for routines accessed exclusively
  7749.             through INT 7A in NetWare versions through 2.0a.  Call
  7750.             with same values as INT 7A
  7751. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell"
  7752. --------N-2F7A10-----------------------------
  7753. INT 2F U - Novell NetWare - TBMI v1.1+ - GET TBMI STATUS
  7754.     AX = 7A10h
  7755. Return: DH = major TBMI version number
  7756.     DL = minor TBMI version number (01h for v1.1)
  7757.     CX = segment address of TBMI resident part
  7758.     BX = status word of TBMI (see below)
  7759. Note:    TBMI is the Task-Switched Buffer Manager Interface
  7760. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  7761.  
  7762. Bitfields for status word:
  7763.  bit 0    INT2F intercepted by TBMI
  7764.  bit 1    INT7A intercepted by TBMI
  7765.  bit 2    INT64 intercepted by TBMI
  7766.  bits 3-14 reserved or unused ???
  7767.  bit 15 outstanding task ID was detected
  7768. --------N-2F7A11-----------------------------
  7769. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT2F HANDLERS
  7770.     AX = 7A11h
  7771. Return: ES:BX -> old INT 2F handler
  7772.     DS:DX -> TBMI INT 2F handler
  7773. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h,AX=7A1Ah
  7774. --------N-2F7A12-----------------------------
  7775. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT64 HANDLERS
  7776.     AX = 7A12h
  7777. Return: ES:BX -> old INT 64 handler
  7778.     DS:DX -> TBMI INT 64 handler
  7779. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  7780. --------N-2F7A13-----------------------------
  7781. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT7A HANDLERS
  7782.     AX = 7A13h
  7783. Return: ES:BX -> old INT 7A handler
  7784.     DS:DX -> TBMI INT 7A handler
  7785. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  7786. --------N-2F7A14-----------------------------
  7787. INT 2F U - Novell NetWare - TBMI v1.1+ - GET STATISTICS
  7788.     AX = 7A14h
  7789.     CX = statistic to retrieve
  7790.         0000h available diagnostic functions???
  7791.         Return: CX = maximum available function??? (000Ch for v2.0)
  7792.         0001h buffers in use
  7793.         Return: CX = TBMI buffers currently in use
  7794.         0002h maximum buffers used
  7795.         Return: CX = maximum number of buffers ever in use
  7796.         0003h unavailable buffers
  7797.         Return: CX = count of unavailable TBMI buffers
  7798.         0004h old interrupt usage
  7799.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  7800.                 INT 64, and INT 7A
  7801.         0005h far call usage
  7802.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  7803.                 including internal accesses)
  7804.         0006h task buffering
  7805.         Return: CX = TBMI task buffering status (enabled/disabled or
  7806.                 disable/enable switch count???)
  7807.         0007h current task ID
  7808.         Return: CX = TBMI current task ID number (0000h if ???)
  7809.         0008h outstanding ID count
  7810.         Return: CX = number of outstanding TBMI IDs
  7811.         0009h configured ECBs
  7812.         Return: CX = number of TBMI Event Control Blocks configured
  7813.         000Ah configured data ECBs
  7814.         Return: CX = number of TBMI data ECBs configured
  7815.         000Bh configured sockets
  7816.         Return: CX = number of TBMI sockets configured (from NETCFG)
  7817.         000Ch current sockets
  7818.         Return: CX = number of TBMI sockets currently in use
  7819. Return: BX = maximum supported subfunction (000Ch)
  7820. SeeAlso: AX=7A10h
  7821. --------N-2F7A15-----------------------------
  7822. INT 2F OU - Novell NetWare - TBMI v1.1 only - RESET ???
  7823.     AX = 7A15h
  7824. Return: BX = new value of ???
  7825. Desc:    set ??? to its default value
  7826. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7827. SeeAlso: AX=7A17h
  7828. --------N-2F7A16-----------------------------
  7829. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  7830.     AX = 7A16h
  7831.     CX = ???
  7832.     ???
  7833. Return: ???
  7834. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7835. --------N-2F7A17-----------------------------
  7836. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  7837.     AX = 7A17h
  7838.     ???
  7839. Return: BX = old value of ???
  7840.     CX = new value of ???
  7841. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7842. SeeAlso: AX=7A15h
  7843. --------N-2F7A18-----------------------------
  7844. INT 2F U - Novell NetWare - TASKID v1.0 - INSTALLATION CHECK
  7845.     AX = 7A18h
  7846. Return: AL = FFh if installed
  7847.         BX = configuration flags (see below)
  7848.         CX = resident code segment
  7849. SeeAlso: AX=7A10h
  7850.  
  7851. Bitfields for configuration flags:
  7852.  bit 0    INT 2F hooked
  7853.  bit 3    INT 08 hooked
  7854.  other    unused
  7855. --------N-2F7A19-----------------------------
  7856. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 08 HANDLERS
  7857.     AX = 7A19h
  7858. Return: AL = FFh
  7859.     DS:DX -> TASKID INT 08 handler
  7860.     ES:BX -> original INT 08 handler
  7861. --------N-2F7A1A-----------------------------
  7862. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 2F HANDLERS
  7863.     AX = 7A1Ah
  7864. Return: AL = FFh
  7865.     DX:DX -> TASKID INT 2F handler
  7866.     ES:BX -> original INT 2F handler
  7867. SeeAlso: AX=7A11h,AX=7A19h
  7868. --------N-2F7A1B-----------------------------
  7869. INT 2F U - Novell NetWare - TASKID v1.0 - GET DIAGNOSTICS INFORMATION
  7870.     AX = 7A1Bh
  7871.     CX = desired information
  7872.         0000h supported functions
  7873.         0001h TASKID ID number
  7874.         Return: CX = ID number
  7875.         0002h set-ID count
  7876.         Return: CX = ID set count
  7877. Return: AL = FFh
  7878.     BX = highest supported subfunction number (0002h)
  7879. SeeAlso: AX=7A14h,AX=7A18h
  7880. --------N-2F7A1C-----------------------------
  7881. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7882.     AX = 7A1Ch
  7883.     BP = ???
  7884.     CX:DX = ???
  7885. Return: AX = 70FFh
  7886. --------N-2F7A1D-----------------------------
  7887. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7888.     AX = 7A1Dh
  7889.     ???
  7890. Return: ES = ???
  7891.     ???
  7892.     SI destroyed
  7893. --------N-2F7A1E-----------------------------
  7894. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7895.     AX = 7A1Eh
  7896.     ES:SI -> ???
  7897.     ???
  7898. Return: ???
  7899. --------N-2F7A20BX0000-----------------------
  7900. INT 2F - Novell NetWare - Advanced NetWare 4.0 DOS Requester - GET CALL ADDRESS
  7901.     AX = 7A20h
  7902.     BX = 0000h
  7903. Return: AX = 0000h on success (installed)
  7904.         ES:BX -> far call address for DOS Requester
  7905. Notes:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  7906.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  7907.       is backward compatible with NetWare 2.1x through 3.11 servers as
  7908.       well.     Note that there was a NetWare 4.0 in the early 1980's, which
  7909.       can cause confusion.
  7910.     this call is used as the installation check by VLM.EXE, which is the
  7911.       loader for all the modules of the DOS Requester
  7912. Index:    installation check;NetWare 4.0 DOS Requester
  7913. --------N-2F7A20BX0001-----------------------
  7914. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7915.     AX = 7A20h
  7916.     BX = 0001h
  7917. Return: AX = 0000h
  7918.     ES:BX -> ??? entry point
  7919. --------N-2F7A20BX0002-----------------------
  7920. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ADDRESS
  7921.     AX = 7A20h
  7922.     BX = 0002h
  7923. Return: AX = 0000h
  7924.     ES:BX -> ??? data
  7925. --------N-2F7A20BX0003-----------------------
  7926. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ???
  7927.     AX = 7A20h
  7928.     BX = 0003h
  7929. Return: AX = 0000h
  7930.     ES:BX -> ???
  7931. --------N-2F7A20BX0004-----------------------
  7932. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ADDRESS
  7933.     AX = 7A20h
  7934.     BX = 0004h
  7935. Return: AX = 0000h
  7936.     ES:BX -> ??? data (see below)
  7937.  
  7938. Format of data:
  7939. Offset    Size    Description
  7940.  00h    DWORD    pointer to ??? (code)
  7941.  04h  4 BYTEs    ???
  7942.  08h    DWORD    pointer to ??? (code)
  7943.     ???
  7944. --------N-2F7A20BX0005-----------------------
  7945. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7946.     AX = 7A20h
  7947.     BX = 0005h
  7948. Return: AX = 0000h
  7949.     ES:BX -> ??? entry point
  7950. --------N-2F7A20BX0006-----------------------
  7951. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7952.     AX = 7A20h
  7953.     BX = 0006h
  7954. Return: AX = 0000h
  7955.     ES:BX -> ??? entry point (RETF in v1.03)
  7956. --------N-2F7A20BX0007-----------------------
  7957. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7958.     AX = 7A20h
  7959.     BX = 0007h
  7960. Return: AX = 0000h
  7961.     ES:BX -> ??? entry point (RETF in v1.03)
  7962. --------N-2F7A20BX0008-----------------------
  7963. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7964.     AX = 7A20h
  7965.     BX = 0008h
  7966. Return: AX = 0000h
  7967.     ES:BX -> ??? entry point (RETF in v1.03)
  7968. --------N-2F7A20BX0080-----------------------
  7969. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7970.     AX = 7A20h
  7971.     BX = 0080h
  7972. Return: AX = 0000h
  7973.     ES:BX -> ??? entry point (RETF in v1.03)
  7974. Note:    this function is identical to AX=7A20h/BX=0006h in v1.03
  7975. --------N-2F7A20BX0081-----------------------
  7976. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7977.     AX = 7A20h
  7978.     BX = 0081h
  7979. Return: AX = 0000h
  7980.     ES:BX -> ??? entry point (RETF in v1.03)
  7981. Note:    this function is identical to AX=7A20h/BX=0007h in v1.03
  7982. --------N-2F7A20BX0082-----------------------
  7983. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7984.     AX = 7A20h
  7985.     BX = 0082h
  7986. Return: AX = 0000h
  7987.     ES:BX -> ??? entry point (RETF in v1.03)
  7988. Note:    this function is identical to AX=7A20h/BX=0008h in v1.03
  7989. --------N-2F7A40-----------------------------
  7990. INT 2F - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  7991.     AX = 7A40h
  7992. Return: AX = 7AFFh if installed
  7993.         BX = ???
  7994.         bit 0: ???
  7995.         bit 1: ???
  7996.         bits 15-2: ???
  7997.         CX = version (CH=major, CL=minor)
  7998.         DX = 0000h
  7999.         ES:DI -> entry point for TCP/IP stack (see below)
  8000. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  8001.     this function is also supported by the Beame&Whiteside BWLWP40 shim,
  8002.       but it only returns AL and ES:DI, and does not support AX=7A41h
  8003. SeeAlso: AX=7A41h,INT 60"Excelan"
  8004.  
  8005. Call entry point with:
  8006.     ES:SI -> parameter block (see below)
  8007.     ???
  8008. Return: ES:SI parameter block updated
  8009.  
  8010. Format of parameter block:
  8011. Offset    Size    Description
  8012.  00h    DWORD    ???
  8013.  04h    WORD    (return) ???
  8014.  06h    WORD    (return) ???
  8015.  08h  4 BYTEs    ???
  8016.  0Ch    BYTE    flags???
  8017.  0Dh  7 BYTEs    ???
  8018.  14h    BYTE    (return) ???
  8019.  15h    BYTE    (call) ??? number, bit 7 set if ???
  8020.  16h    BYTE    ???
  8021.  17h    BYTE    (return) result or error code
  8022.     ???
  8023. --------N-2F7A41-----------------------------
  8024. INT 2F - Novell NetWare - TCP/IP Protocol Stack - WINDOWS SUPPORT???
  8025.     AX = 7A41h
  8026.     ES:DI -> FAR entry point for ??? (will be called with BX=1,2,3,4)
  8027. Return: AX = 7AFFh if supported
  8028.         BX = ??? (see AX=7A40h)
  8029.         CX = version (CH=major, CL=minor)
  8030.         DX = 0000h
  8031.         ES:SI -> DWORD containing passed value of ES:DI
  8032.         ES:DI -> entry point for TCP/IP stack
  8033. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  8034.     the pointer which is set to ES:DI is cleared to 0000h:0000h when
  8035.       a Windows exit broadcast is received
  8036. SeeAlso: AX=7A40h
  8037. --------N-2F7A42-----------------------------
  8038. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ??? ENTRY POINT
  8039.     AX = 7A42h
  8040. Return: AX = 7AFFh if supported
  8041.         ES:DI -> ??? entry point (see below)
  8042.  
  8043. Call entry point with:
  8044.     DX = ???
  8045.     ES:DI -> ??? (see below)
  8046. Return: AX = 0000h
  8047.     other registers destroyed
  8048.  
  8049. Format of data buffer:
  8050. Offset    Size    Description
  8051.  00h    WORD    offset of WORD ??? or 0000h
  8052.  02h    WORD    offset of DWORD ??? or 0000h
  8053.  04h    WORD    offset of DWORD ??? or 0000h
  8054. --------N-2F7A43-----------------------------
  8055. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - ???
  8056.     AX = 7A43h
  8057. Return: AX = 7AFFh if supported
  8058.         DX = offset of ???
  8059. SeeAlso: AX=7A44h
  8060. --------N-2F7A44-----------------------------
  8061. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - ???
  8062.     AX = 7A44h
  8063.     DX = offset of ??? (see AX=7A43h)
  8064. Return: AX = 7AFFh if supported
  8065. SeeAlso: AX=7A43h
  8066. --------N-2F7A4C-----------------------------
  8067. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  8068.     AX = 7A4Ch
  8069. Return: AX = 7AFFh if supported
  8070.         BX = ??? (0037h)
  8071.         CX = ??? (001Ch)
  8072. --------N-2F7A4DBX0001-----------------------
  8073. INT 2F - Novell NetWare - ???
  8074.     AX = 7A4Dh
  8075.     BX = 0001h
  8076.     ES:DI -> ???
  8077. Return: AL = FFh if ???
  8078.         ES:DI -> ???
  8079. Note:    called by NETBIOS.EXE v3.01
  8080. --------N-2F7A4FBX0001-----------------------
  8081. INT 2F - Novell NetWare - SNMP.EXE - INSTALLATION CHECK
  8082.     AX = 7A4Fh
  8083.     BX = 0001h
  8084. Return: AX = 7AFFh if installed
  8085. --------N-2F7A4FBX0002-----------------------
  8086. INT 2F - Novell NetWare - SNMP.EXE - ???
  8087.     AX = 7A4Fh
  8088.     BX = 0002h
  8089. Return: AL = status
  8090.         4Fh if failed
  8091.         FFh if successful
  8092. --------N-2F7A80-----------------------------
  8093. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  8094.     AX = 7A80h
  8095. Return: nothing
  8096. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  8097.       TSRs that it is unsafe to call the shell in the future.
  8098.     must be passed through so that all interested programs see the exit
  8099.     on receiving this call, IPXODI clears an internal pointer to a
  8100.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  8101.       0000h:0000h and stops calling it
  8102. SeeAlso: AX=7A81h
  8103. --------N-2F7A81-----------------------------
  8104. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  8105.     AX = 7A81h
  8106.     CX:DX -> shell's INT 21h entry point
  8107. Return: nothing
  8108. Notes:    the shell calls this function as it loads to allow interested TSRs
  8109.       and drivers to make a local copy of the shell's entry point
  8110.     must be passed through so that all interested programs see it
  8111. --------N-2F7A85-----------------------------
  8112. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  8113.     AX = 7A85h
  8114.     CX = broadcast server number
  8115. Return: CX = 0000h if broadcast message handled by another program
  8116.     CX unchanged if broadcast not handled
  8117. --------N-2F7A90-----------------------------
  8118. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  8119.     AX = 7A90h
  8120. Return: AL = 00h if present
  8121.         BX = ???
  8122.         CX = PSP segment of NETBIOS resident code
  8123. SeeAlso: AX=7AFEh
  8124. --------N-2F7AC1-----------------------------
  8125. INT 2F - LAN HiJack - LHR - DISABLE???
  8126.     AX = 7AC1h
  8127. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  8128.       to take over control of a workstation remotely; LHR is the program
  8129.       run on the slave workstation
  8130. SeeAlso: AX=7AC8h,AX=7AC9h,AX=7ACFh
  8131. --------N-2F7AC2-----------------------------
  8132. INT 2F - LAN HiJack - LHR - SYNCHRONIZE SHIFT STATES???
  8133.     AX = 7AC2h
  8134. Note:    sets BIOS keyboard status byte to an internal variable
  8135. SeeAlso: AX=7AC3h,AX=7ACFh
  8136. --------N-2F7AC3-----------------------------
  8137. INT 2F - LAN HiJack - LHR - CLEAR ??? FLAG
  8138.     AX = 7AC3h
  8139. SeeAlso: AX=7AC2h,AX=7ACFh
  8140. --------N-2F7AC8-----------------------------
  8141. INT 2F - LAN HiJack - LHR - ENABLE FUNCTIONS
  8142.     AX = 7AC8h
  8143.     BL = function(s) to enable (see below)
  8144. SeeAlso: AX=7AC1h,AX=7AC9h,AX=7ACFh
  8145.  
  8146. Bitfields for function(s) to enable/disable:
  8147.  bit 0    ???
  8148.  bit 1    remote keyboard enabled
  8149.  bit 2    support remote's mouse
  8150.  bits 3-7 unused
  8151. --------N-2F7AC9-----------------------------
  8152. INT 2F - LAN HiJack - LHR - DISABLE FUNCTIONS
  8153.     AX = 7AC9h
  8154.     BL = function(s) to disable (see AX=7AC8h)
  8155. SeeAlso: AX=7AC1h,AX=7AC8h
  8156. --------N-2F7ACA-----------------------------
  8157. INT 2F - LAN HiJack - LHJ - ???
  8158.     AX = 7ACAh
  8159.     BL = ???
  8160. Return: ???
  8161. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  8162.       to take over control of a workstation remotely; LHJ is the program
  8163.       run on the controlling workstation
  8164. --------N-2F7ACB-----------------------------
  8165. INT 2F - LAN HiJack - LHJ - ???
  8166.     AX = 7ACBh
  8167.     BX = ???
  8168. Return: ???
  8169. Note:    this function appears to be related to the keyboard
  8170. SeeAlso: AX=7ACCh
  8171. --------N-2F7ACC-----------------------------
  8172. INT 2F - LAN HiJack - LHJ - ???
  8173.     AX = 7ACCh
  8174.     BX = ???
  8175. Return: ???
  8176. Note:    this function appears to be related to the mouse
  8177. SeeAlso: AX=7ACBh
  8178. --------N-2F7ACFBX0000-----------------------
  8179. INT 2F - LAN HiJack - LHR - INSTALLATION CHECK
  8180.     AX = 7ACFh
  8181.     BX = 0000h
  8182. Return: BX = segment of resident code if installed
  8183. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  8184.       to take over control of a workstation remotely; LHR is the program
  8185.       run on the slave workstation
  8186. --------N-2F7AF0-----------------------------
  8187. INT 2F - Novell NetWare - DOSNP.EXE v1.30G - INSTALLATION CHECK
  8188.     AX = 7AF0h
  8189. Return: AL = FFh if present
  8190.         ES = 7AF0h
  8191.         CX = PSP segment of resident code
  8192. --------N-2F7AF1-----------------------------
  8193. INT 2F - Novell NetWare - Access Server Driver - INSTALLATION CHECK
  8194.     AX = 7AF1h
  8195.     BL = sequence number (01h first driver, 02h second, 00h no driver)
  8196. Return: AX <> 7AF1h if present
  8197.         BH = total number of drivers
  8198.         ---if BL nonzero on entry---
  8199.         AL = number of ports provided by specified driver
  8200.         ES:DI -> driver entry point (see below)
  8201.         ES:DX -> ID string
  8202.  
  8203. Call driver entry point with:
  8204.    AH    function
  8205.    01h initialize port
  8206.     AL = port number (00h-0Fh)
  8207.     ES:BX -> configuration parameter block (see below)
  8208.     interrupts disabled
  8209.     Return: CF clear if successful
  8210.         CF set on error
  8211.    02h get port status
  8212.     AL = port number (00h-0Fh)
  8213.     interrupts disabled
  8214.     Return: CF clear if successful
  8215.             BL = transmitter status (see below)
  8216.             BH = receiver status (see below)
  8217.             DL = external status signals (see below)
  8218.         CF set on error
  8219.         interrupts disabled
  8220.    03h get input from port
  8221.     AL = port number (00h-0Fh)
  8222.     CX = size of data buffer
  8223.     ES:BX -> buffer for data
  8224.     interrupts disabled
  8225.     Return: CF clear if successful
  8226.         CF set on error
  8227.         interrupts disabled
  8228.         CX = number of bytes read
  8229.     Note:    the driver will add a NUL to the buffer when a break
  8230.           signal is detected
  8231.    04h send output data to port
  8232.     AL = port number (00h-0Fh)
  8233.     CX = number of bytes to send
  8234.     ES:BX -> buffer containing data
  8235.     interrupts disabled
  8236.     Return: CF clear if successful
  8237.         CF set on error
  8238.         interrupts disabled
  8239.         CX = number of bytes actually written
  8240.    05h get I/O character counts
  8241.     AL = port number (00h-0Fh)
  8242.     interrupts disabled
  8243.     Return: CF clear if successful
  8244.             BX = number of bytes pending transmission
  8245.             CX = number of bytes available for reading
  8246.         CF set on error
  8247.         interrupts disabled
  8248.    06h control XON/XOFF
  8249.     AL = port number (00h-0Fh)
  8250.     DL = new state
  8251.         (00h software flow control disabled, else enabled)
  8252.     interrupts disabled
  8253.     Return: CF clear if successful
  8254.         CF set on error
  8255.         interrupts disabled
  8256.    07h get error counts and statistics
  8257.     AL = port number (00h-0Fh)
  8258.     ES:BX -> buffer for statistics (see below)
  8259.     interrupts disabled
  8260.     Return: CF clear if successful
  8261.             ES:BX buffer filled
  8262.         CF set on error
  8263.         interrupts disabled
  8264.    08h general request
  8265.     AL = port number (00h-0Fh)
  8266.     DX = requested operations
  8267.         bit 0: flush transmit buffers
  8268.         bit 1: flush receive buffers
  8269.         bit 4: define XON/XOFF characters
  8270.     ES:BX -> XON/XOFF characters (see below) if DX bit 4 set
  8271.     interrupts disabled
  8272.     Return: CF clear if successful
  8273.         CF set on error
  8274.         interrupts disabled
  8275.    09h deadman timer management
  8276.     AL = port number (00h-0Fh)
  8277.     BX = next time interval in seconds (0000h to disable timer)
  8278.     interrupts disabled
  8279.     Return: CF clear
  8280.         interrupts disabled
  8281.    0Ah get buffer sizes
  8282.     AL = port number (00h-0Fh)
  8283.     interrupts disabled
  8284.     Return: CF clear if successful
  8285.            BX = size of transmit buffer
  8286.            CX = size of receive buffer
  8287.         CF set on error
  8288.         interrupts disabled
  8289.  
  8290. Values for transmitter status:
  8291.  00h    uninitialized
  8292.  01h    ready, not transmitting
  8293.  02h    transmitting
  8294.  03h    XOFF received
  8295.  04h    transmitting, buffer full
  8296.  05h    XOFF received and buffer full
  8297.  
  8298. Values for receiver status:
  8299.  00h    uninitialized
  8300.  01h    ready
  8301.  02h    receive buffer full, data may have been lost
  8302.  
  8303. Bitfields for external status signals:
  8304.  bits 7,6 undefined
  8305.  bit 5    CTS active
  8306.  bit 4    DSR active
  8307.  bit 3    DCD active
  8308.  bits 2,1 undefined
  8309.  bit 0    ring indicator
  8310.  
  8311. Format of configuration parameter block:
  8312. Offset    Size    Description
  8313.  00h    BYTE    receive baud rate index
  8314.         00h 50 bps, 01h 75 bps, 02h 110 bps, 03h 134.5 bps,
  8315.         04h 150 bps, 05h 300 bps, 06h 600 bps, 07h 1200 bps,
  8316.         08h 1800 bps, 09h 2000 bps, 0Ah 2400 bps, 0Bh 3600 bps,
  8317.         0Ch 4800 bps, 0Dh 7200 bps, 0Eh 9600 bps, 0Fh 19200 bps,
  8318.         10h 38400 bps, 11h 57600 bps, 12h 115200 bps
  8319.  01h    BYTE    receive bits per character (0=5 bits..3=8 bits)
  8320.  02h    BYTE    receive stop bits
  8321.  03h    BYTE    receive parity
  8322.         00h none, 01h odd, 02h even, 03h mark, 04h space
  8323.  04h    BYTE    transmit baud rate index (same as receive baud rate)
  8324.  05h    BYTE    transmit bits per character (0=5 bits..3=8 bits)
  8325.  06h    BYTE    transmit stop bits
  8326.  07h    BYTE    transmit parity (same as receive parity)
  8327.  08h    BYTE    DTR state (00h off, 01h on)
  8328.  09h    BYTE    RTS state (00h off, 01h on)
  8329.  0Ah    BYTE    flow control
  8330.         00h none, 01h XON/XOFF, 02h RTS/CTS, 03h both
  8331.  0Bh    BYTE    break control (00h off, 01h on)
  8332.  
  8333. Format of statistics:
  8334. Offset    Size    Description
  8335.  00h    BYTE    port number
  8336.  01h    BYTE    external status signals (see above)
  8337.  02h    BYTE    transmitter status (see above)
  8338.  03h    BYTE    receiver status (see above)
  8339.  04h    DWORD    number of characters received
  8340.  08h    DWORD    number of characters transmitted
  8341.  0Ch    WORD    input parity errors
  8342.  0Eh    WORD    input framing errors
  8343.  10h    WORD    lost characters due to hardware overrun
  8344.  12h    WORD    lost characters due to data buffer overrun
  8345. Note:    the counts are not allowed to wrap around; once a count reaches FFFFh
  8346.       or FFFFFFFFh, it is no longer incremented
  8347.  
  8348. Format of XON/XOFF characters:
  8349. Offset    Size    Description
  8350.  00h    BYTE    04h (number of bytes following)
  8351.  01h    BYTE    transmit XON character
  8352.  02h    BYTE    transmit XOFF character
  8353.  03h    BYTE    receive XON character
  8354.  04h    BYTE    receive XOFF character
  8355. --------N-2F7AFE-----------------------------
  8356. INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  8357.     AX = 7AFEh
  8358. Return: AL = FFh if present
  8359.         ES = (data???) segment of DOSNP
  8360. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  8361.        NetWare
  8362. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  8363.       present
  8364. SeeAlso: AX=7A90h
  8365. --------N-2F7AFFBX0000-----------------------
  8366. INT 2F - Novell NetWare - TBMI v1.1+ - INSTALLATION CHECK???
  8367.     AX = 7AFFh
  8368.     BX = 0000h
  8369.     CX = 4E65h ("Ne")
  8370.     DX = 7457h ("tW")
  8371.     ES:DI -> IPX/SPX special handler (XMS/EMS ???)
  8372. Return: AL = FFh if installed
  8373.         CX = configured sockets (14h)
  8374.         DS:SI -> data table ???
  8375.         ES:DI -> IPX far call handler
  8376. Notes:    for IPX/SPX this call reportedly returns DS:SI pointing to the table
  8377.       of pointers to service events queue head and tail
  8378.     this function is also supported by IPXODI
  8379. SeeAlso: AX=7AFFh/BX=0001h
  8380. --------N-2F7AFFBX0001-----------------------
  8381. INT 2F - Novell NetWare - TBMI v1.1+, shell v3.01d - INSTALLATION CHECK???
  8382.     AX = 7AFFh
  8383.     BX = 0001h
  8384.     CX = 4E65h ("Ne")
  8385.     DX = 7457h ("tW")
  8386. Return: AL = FFh if installed
  8387.         CX = ???  (8000h)
  8388.         SI = ??? (or -> ???) (0002h)
  8389.         ES:DI -> IPX far call handler
  8390.         ES:DX -> 6-byte data area ???
  8391. Note:    this function is also supported by IPXODI
  8392. SeeAlso: AX=7AFFh/BX=0000h
  8393. --------d-2F7F00-----------------------------
  8394. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  8395.     AX = 7F00h
  8396. Return: AL = FFh if installed
  8397. SeeAlso: AX=7F01h,AX=7F02h,AX=7F03h
  8398. --------d-2F7F01-----------------------------
  8399. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  8400.     AX = 7F01h
  8401.     DS:DX -> command record (see below)
  8402. Return: AL = status
  8403.         00h successful
  8404.         else error code
  8405. SeeAlso: AX=7F00h,AX=7F02h,INT 11/AH=FFh"SDLP",INT 21/AX=4402h"ASPI"
  8406. SeeAlso: INT 4F/AX=8100h
  8407.  
  8408. Format of command record:
  8409. Offset    Size    Description
  8410.  00h    BYTE    ID
  8411.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation
  8412.  0Bh    WORD    segment of buffer
  8413.  0Dh    WORD    offset of buffer
  8414.  0Fh    BYTE    status
  8415.  10h    BYTE    sense
  8416.  12h    WORD    count
  8417. --------d-2F7F02-----------------------------
  8418. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  8419.     AX = 7F02h
  8420. SeeAlso: AX=7F00h,AX=7F01h
  8421. --------d-2F7F03-----------------------------
  8422. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  8423.     AX = 7F03h
  8424. Return: AL = status
  8425.         00h successful
  8426.         01h unable to uninstall
  8427. SeeAlso: AX=7F00h
  8428. ----------2F7F24-----------------------------
  8429. INT 2F - Multiplex - ???
  8430.     AX = 7F24h
  8431.     ???
  8432. Return: ???
  8433. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  8434. ----------2F7F26-----------------------------
  8435. INT 2F - Multiplex - ???
  8436.     AX = 7F26h
  8437.     ???
  8438. Return: ???
  8439. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  8440. --------!------------------------------------
  8441.